CodeForces 思维题选做
我说是思维题那就肯定不是思维题。
CF1292B Aroma's Search 大意是给一堆有规律的点和起始坐标求最大能经过的点数,反正是一个简单的贪心策略,现在大致证明一下:对于 都有先往小的方向走再往大的方向走。
首先往小的方向走显然是正确的贪心策略,对于一个坐标集 分布巨大多显然是从稠密到稀疏,所以往稠密的部分走没什么毛病。
直到这里还没什么问题,因为如果走到头了,也就是走到 时间不够了直接停止,那后面的时间呢?为什么回头走还最优啊?
这里直接暴力计算一下, 显然路程为 ,因为有单调性。那么就有 路程为
然后显然有 ,把题目中的条件代进去就是
同理有
那么显然有
然后就出来了走左边更优,你这时走回去也就是两倍的路程而已,先走左边全部的甚至比往右边走一步还要优。所以就是这么简单,我可能写复杂了。
CF1304C Air Conditioner 每一分钟可以让温度 ,求是否能满足每一时刻正好在某一区间内。
巨大多简单题,每一次求出可能的目标区间然后判断即可,注意求线段交可以用 min, max
。
CF1355F Guess Divisors Count 对于一个正整数 的因数个数,每一次可以询问一个正整数 ,交互库会返回 。最多可以询问 次。最后需要你给出这个数的因数个数,若你给出的 与精确答案 满足以下两个条件中的任意一个则视为正确。
求因数个数,根据唯一分解定理,对于正整数 有 ,其中 表示 的第 个质因子的指数。考虑从这个意义上枚举质因子,最后算乘积就好了。
但是,由于询问次数不能超过 ,考虑对询问的过程进行优化。
- 怎么快速得到某个质因子的指数?
朴素做法显然是把每一个可能的指数询问一遍。但是想想就知道,对于一个确定存在的质因子 ,不如直接用 去询问 :这里的 表示第一个满足 的正整数。同时,这里的 直接设为上界 即可,询问 就可以快速得到它的指数。
- 怎么快速得到 “ 确定存在的质因子 ”?
由于允许的询问数量极小,所以考虑批量询问。由于,想到把一串质数压成一个大数进行询问,这样就可以得到存在的质因子:从而可以通过 1 中做法进行处理。
- 但是即使是这样优化了也跑不进 次啊?
还没完呢!由于这道题需要给出模糊答案,我们就可以进行模糊的处理。
先前的过程中,每一次询问完压成的大数的段,我们都可以发现,如果当前剩余的 小于这一段后第一个数(不妨设为 ,当前得到的答案为 )的立方,即 ,此时的因数个数一定会被控制在 ,即 间,因为 对于答案的贡献为 ,而最坏情况为当前剩余的数无法产生新的贡献(即为 ),所以折中输出 ,必定正确。
处理完后,我们发现,还没有用上差不超过 的条件。
所以考虑设置一个阈值使得答案可以通过特判得到。
由于上述处理时,立方可以保证 ,得到阈值范围在三次方根内。
充分发扬人类智慧发现这种方法取到 左右可以通过,下面分两种情况讨论。
- 如果当前 或 :剩下的数最多由三个质数相乘得到,最终答案最少为 ,最多为 ,输出 可以折中。
- 如果当前答案不为 或 :考虑最坏情况,当前答案为 ,前面取到 。此时剩余的数最多为 。发现无法承受立方级别的新增质因子积(由于值域为 左右往上),所以最多为平方级别的贡献。此时答案最少为 ,最多为 。折中为 即可。
这题就做完了,实现细节有点多。
CF1313D Happy New Year
每一个区间可以选或不选,选的区间贡献都 。
现在要求序列中最大的可能奇数个数。
根本不会,希望之后能看懂。
我之前是什么谜语人。
CF1322B Present 求 ,。
按位考虑,考虑进位情况以及每一位最后的奇偶性。
本文作者:MistZero
本文链接:https://www.cnblogs.com/MistZero/p/CF-Interesting-Problems.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步