AtCoder Regular Contest 185 题解
A - mod M Game 2
第一个观察是如果一个人手中还有 2 张牌,那么他一定不会被秒。
这可以推出决定胜负的时刻一定是 Alice 和 Bob 手中只剩一张牌的时候,此时如果 Alice 被秒了,那么她就似了,否则她就赢了。
考虑 Alice 什么时候能被秒。记决定胜负的时刻 Alice 手中的牌是 ,Bob 手中的牌是 ,那么 Alice 被秒的必要条件就是 ,不妨去证明它也是充分的。
- 若 ,此时 。当 Bob 有 张牌时,他可以留着 这张牌不出;当 Bob 有恰好 2 张牌时,若 Bob 留着 不出,那么此时牌的和为 ,不难发现它一定不会是 的倍数,所以 Bob 可以留着 不出。由此可知,Bob 一定能赢。
- 否则,Bob 一定输。
可以 check。
B - +1 and -1
关键性质:操作不会改变数列的和。
记 。
我们可以构造一个新序列 ,满足 ,。
大胆猜测,如果 能调整成不降的序列,那么 一定能调整成 。
这显然是正确的,因为我们可以对 调整成的不降的序列贪心调整。
所以只需要 check 是否能调整成 即可,这个可以贪心判断。
时间复杂度 。
C - Sum of Three Integers
枚举 ,然后就转化成了寻找 使得 。
先考虑如何判断可行性。
记 ,那么 ,就是 的方案数。
然后暴力判断即可,注意实现,不要多次进循环。
时间复杂度 。
D - Random Walk on Tree
先考虑 的情况,此时图是一个菊花。
我们走过的路一定是从 0 走到叶子,然后再返回根,记这为一次 round trip。
考虑如果已经染了 个叶子,此时还需要的 round trip 次数为 。
所以答案为 (最后一次到叶子无需返回)。
对于 的情况,发现一次 round trip 的期望步数为 (多分支不影响 round trip 的步数),那么可以得到答案为 乘上 的答案。
时间复杂度线性。
E - Adjacent GCD
考虑从小到大枚举 ,计算答案的变化量。
首先原本的答案会乘 2,因为可以把原本的 状态取反形成新的状态。
然后要计算 的贡献,即 。
考虑维护每个值的贡献系数 ,那么就转化为了求:
直接上欧拉反演:
这样就能做到 了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步