ABC 384(A~F)
期末周的第二把网瘾,vp了一把abc。这把打得还是比较舒服的,做出了A~E。但最后两道题还是出得太慢了(一道思路太慢,一道调试太慢)。什么时候能够在赛时做出F题呢qwq...
ABC
这场abc的ABC题还是很白给的,就不再赘述了。
D
前缀后缀和 + 二分
题意是给定一个循环数组和定值
这个子数组的形式只有两种情况:
- 原数组的某个子区间
- 原数组某个后缀 + 若干个整个数组 + 原数组某个前缀 拼接而成
对于情况1,采用枚举右端点,二分左端点的传统套路
对于情况2,设后缀和为
pre + k * S + suf == sum
其中
暴力枚举
枚举
两种情况的复杂度均为
刚开始时看这道题就有了这个思路,但到比赛快结束时才AC。还是太菜了。。。
E
优先队列版bfs
思路一点都不难想,就是每次扩展时选择可以扩展的所有位置中最小的那个数就行。
因为每一次对于当前可以选择的所有数,选择了某个数时,只会扩大选择范围,而原来可以选择的那些数都仍然可以被选。而越小的数越可以选择。顺着这样的思路,很容易想到每次贪心取最小就是正解。
实现也很简单,直接队列改为小根堆再
不过赛时此题WA了三发。debug了半天最后才发现是地图中的数据也会爆
F
数学题。赛后看完官方题解后思路逐渐清晰,最后自己补出来了。
题意就是给一个数组,求出数组中每一对
由于最大值
则:
ans = Σ (res[k] / 2^k) , k = 0,1,2 …… 25
设
则恰好含有k个因子2 的
res[k] = sum[k] - sum[k + 1]
现在考虑计算所有的
暴力即直接
- 对于任意两个数
,它们除以 的余数为 。若二者的和是 的倍数,则一定是以下两种情况之一: 均为0
因此可以考虑
对于某个余数
注意当余数为
G
G看官方题解是个分块,不太会qwq...那就补到这里吧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战