逸一时,误一世!|

MistZero

园龄:5年5个月粉丝:8关注:3

CodeForces 思维题选做

我说是思维题那就肯定不是思维题。


CF1292B Aroma's Search 大意是给一堆有规律的点和起始坐标求最大能经过的点数,反正是一个简单的贪心策略,现在大致证明一下:对于 1pLimit 都有先往小的方向走再往大的方向走。

首先往小的方向走显然是正确的贪心策略,对于一个坐标集 xi=ax×xi1+bx, yi=ay×yi1+by 分布巨大多显然是从稠密到稀疏,所以往稠密的部分走没什么毛病。

直到这里还没什么问题,因为如果走到头了,也就是走到 (x0,y0) 时间不够了直接停止,那后面的时间呢?为什么回头走还最优啊?

这里直接暴力计算一下,(xi,yi)(xi1,yi1) 显然路程为 xi+yixi1yi1,因为有单调性。那么就有 (xi,yi)(x0,y0) 路程为

j=1ixj+yjxj1yj1=xi+yix0y0

然后显然有 (xi,yi)(xi+1,yi+1)=(xi+1+yi+1xiyi),把题目中的条件代进去就是
ax×xi+bx+ay×yi+byxiyi
=(ax1)xi+(ay1)yi+bx+by

ax2, ay2, bx0, by0 (xi,yi)(xi+1,yi+1)xi+yi
同理有 (xi,yi)(x0,y0)xi+yi

那么显然有 (xi,yi)(x0,y0)(xi,yi)(xi+1,yi+1)
然后就出来了走左边更优,你这时走回去也就是两倍的路程而已,先走左边全部的甚至比往右边走一步还要优。所以就是这么简单,我可能写复杂了。


CF1304C Air Conditioner 每一分钟可以让温度 ±1,求是否能满足每一时刻正好在某一区间内。
巨大多简单题,每一次求出可能的目标区间然后判断即可,注意求线段交可以用 min, max


CF1355F Guess Divisors Count 对于一个正整数 x (1x109) 的因数个数,每一次可以询问一个正整数 Q (1Q1018),交互库会返回 gcd(x,Q)。最多可以询问 22 次。最后需要你给出这个数的因数个数,若你给出的 ans 与精确答案 d 满足以下两个条件中的任意一个则视为正确。

  • |ansd|7
  • 12ansd2

求因数个数,根据唯一分解定理,对于正整数 xans=i=1n(pi+1),其中 pi 表示 x 的第 i 个质因子的指数。考虑从这个意义上枚举质因子,最后算乘积就好了。

但是,由于询问次数不能超过 22,考虑对询问的过程进行优化。


  1. 怎么快速得到某个质因子的指数?

朴素做法显然是把每一个可能的指数询问一遍。但是想想就知道,对于一个确定存在的质因子 P,不如直接用 Pk 去询问 gcd:这里的 k 表示第一个满足 Pkxmax 的正整数。同时,这里的 xmax 直接设为上界 109 即可,询问 Q=Pk 就可以快速得到它的指数。

  1. 怎么快速得到 “ 确定存在的质因子 P ”?

由于允许的询问数量极小,所以考虑批量询问。由于Q (1Q1018),想到把一串质数压成一个大数进行询问,这样就可以得到存在的质因子:从而可以通过 1 中做法进行处理。

  1. 但是即使是这样优化了也跑不进 22 次啊?

还没完呢!由于这道题需要给出模糊答案,我们就可以进行模糊的处理。

先前的过程中,每一次询问完压成的大数的段,我们都可以发现,如果当前剩余的 xmaxP 小于这一段后第一个数(不妨设为 g,当前得到的答案为 ans)的立方,即 g3,此时的因数个数一定会被控制在 [ans,(3+1)ans],即 [ans,4ans] 间,因为 g3 对于答案的贡献为 4,而最坏情况为当前剩余的数无法产生新的贡献(即为 1),所以折中输出 2ans,必定正确。

处理完后,我们发现,还没有用上差不超过 7 的条件。

所以考虑设置一个阈值使得答案可以通过特判得到。

由于上述处理时,立方可以保证 12dans2d,得到阈值范围在三次方根内。

充分发扬人类智慧发现这种方法取到 700 左右可以通过,下面分两种情况讨论。

  • 如果当前 ans=1ans=2:剩下的数最多由三个质数相乘得到,最终答案最少为 1×1=1,最多为 2×23=16,输出 8 可以折中。
  • 如果当前答案不为 12:考虑最坏情况,当前答案为 3,前面取到 22=4。此时剩余的数最多为 2.5×108。发现无法承受立方级别的新增质因子积(由于值域为 700 左右往上),所以最多为平方级别的贡献。此时答案最少为 ans,最多为 (1+1)2ans=4ans。折中为 2ans 即可。

这题就做完了,实现细节有点多。


CF1313D Happy New Year
每一个区间可以选或不选,选的区间贡献都 +1
现在要求序列中最大的可能奇数个数。

根本不会,希望之后能看懂。
我之前是什么谜语人。


CF1322B Presenti=1nj=i+1n(ai+aj)n4×105

按位考虑,考虑进位情况以及每一位最后的奇偶性。

本文作者:MistZero

本文链接:https://www.cnblogs.com/MistZero/p/CF-Interesting-Problems.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   MistZero  阅读(128)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起