2148G - Farmer John’s Last Wish *1900
转化题意,设一个前缀的 gcd 为 ,要选尽可能多的数使得这些数的 gcd 不为 。
遍历前缀,当从 到 时,分三种情况讨论:
- 在选取的数中,此时这些数的 gcd 一定为 的约数,开一个桶,枚举取 max 即可。
- 不在选取的数中,继承 的答案。
- 不在选取的数中,且 全被选,判断一下 gcd 的关系即可,若合法答案即为 。
时间复杂度 。
1510D - Digits *2100
这有 *2100?直接 dp 存不下最大乘积,但是你取个 log 就能过了(python 可能也能过)。
正解好像是先判掉 和 的情况,然后末位为 或 的数字就不能选了。
有个结论是剩下的数中最多只有三个数不会被选,分 的奇偶性讨论一下就行。从而对这 个数 dp 即可,时间复杂度 。
1665D - GCD Guess *2000
询问 相当于得知 ,据此固定 而改变 即可得知 与某个常数的 。根据询问次数不超过 的提示,我们考虑逐位确定 的值(因为 ,求 会更加方便)。
首先我们可以发现询问 可得知 的奇偶性,假设我们已经知道了 的后 位对应的值为 ,那么判断第 位是否为 1 只需判断 是否是 的倍数,如此即可逐位求出 的值,且询问次数 次。
549D - Haar Features *1900
每次找最右下角的系数不为 的格子,将其系数变为 即可,复杂度 。
倒序遍历可以省去找格子的时间,再使用二维树状数组可以将时间复杂度优化至 。
考虑这样为什么是对的,取最优方案,你会发现这个过程刚好能够覆盖到最优方案的所有操作点,于是正确性显然。
940E - Cashback *2000
这有 *2000?首先选出来的区间长度肯定为 的倍数(不然最小值会更小),其次选一个长度为 的不如选两个长度为 的,于是直接 dp 就行,转移只可能从 或 转移来,用单调队列或者 st 表优化区间最值即可,复杂度 。
484B - Maximum Value *2100
貌似写了个非常规做法,但是 咋还得卡常啊。
熟知 ,对 数论分块,每次只需要查询值域在 内的最小值即可最大化答案,加了点剪枝( 的初始值设为 )就能过。
有点唐了,把数论分块换成去重后枚举 和 就是均摊 的,调和级数都忘了。
557D - Vitaly and Cycle *2000
先二分图染色,不能染的已经含有奇环,然后把加三条边和两条边的特殊情况判掉。
考虑一个连通的二分图,想要让其含有奇环即把其变为非二分图,于是连接两个黑点或两个白点即可,总时间复杂度 。
2044F - Easy Demon Problem *1900
即求是否存在 满足 ,由于 ,直接枚举 的约数,开个桶判断即可,时间复杂度 。