做题笔记 - 数论
交换余生(SCCPC 2026)
我印象中我可能很久以前做过原题,但是忘了。但思路挺直接的。
即序列重排后要求每一个前缀 和对应后缀的 不能相同。
先把数组的最大公约数降成 ,不失一般性。否则可能会干扰后续操作。
不难发现前缀 必然单调不增,后缀单调不减。由于不可能出现一个 使得存在一个前缀和对应后缀使得 均为 (这样的话就意味着序列 恰好为 了),所以存在不满足题目条件的情况只能是至少存在一个前缀和对应后缀 恰好为 。
对于一个合法的序列,前段有一个公约数 ,后段有一个公约数 。所有元素中最多只能存在一个元素同时不能被 整除,放在序列中间,如果可以被 整除放在前段,如果可以被 整除放在后段。对于 可以枚举 所有因数 做判断(若存在合法序列,则 中至少有一个能被 整除)。每次判断的时候筛掉每一个不能被 整除的元素,在剩下的序列里面用同样的方法枚举 再次筛掉同样不能被 整除的元素判断剩下的元素个数是否小于等于 。若可以,说明中段存在放 个同时不能被 的元素的方案,否则不行。
Increment All Divisors
难度:1911
我怎么一道 AtCoder 蓝题都做了 3h 啊,我是不是要完蛋了。
令每个元素要到达的值为 ,在第 个元素上操作的数量为 。则有:
。令 ,则有:
。由莫比乌斯反演可得:
。显然,我们得到的 是关于 的一次函数形如 。注意到这里的 需要满足非负,所以即要求若干个不等式组 。分讨一下 的正负性可以得到 的范围。
注意到每一次操作都会使 变化 ,所以题目要我们求的实际上是 。当 取最小值时可以得到最优解。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Magic Garden!
