CF div2 996(A~D)

手速场,前三题偏简单,后三题偏难。赛时三题,C题做法麻烦了些导致过得不是很快,但最后打得也不是很差。

A

两只青蛙相邻时,可移动的青蛙一定输:直接把该青蛙挤到边缘即可。

而是否相邻可以直接用二者初始间距的奇偶性来判断,因为显然先后手和间距奇偶性的关系是保持不变的,所以间距为0时的先后手可以直接根据初始的先后手和间距来判断。

code

B

将所有a[i]b[i]预处理出来,问题等价于:可给某个数加1,其他数减1,最终是否可以让所有数都>=0

显然最多只能有一个负数,否则其中的某两个负数永远无法协调。

而恰有一个负数时,只有当其他正数中的最小者>=该负数的绝对值时,才能确保二者最终都>=0

按上述方法判断即可。

code

C

构造题硬被我做成了解方程题。。。

我的方法是设起点g[1][1]=x,在代码中设方程利用了pair键值对(a,b)来维护ax+b的两个系数,比如对于起点g[1][1]=x,即为a=1,b=0。而且可以发现,沿着给定路径走到第i个点时,在前i1个点上的数均已用ax+b表示的情况下,第i个点上的数也是可以直接用ax+b确定的。因此层层递推,最终路径上的所有点均可以用ax+b的形式唯一表示。

最后看每一行,每一列用ax+b形式表示出的总和,当有任意两个总和对应x的系数不相等时,x便可直接解出。若所有总和对应的x系数均相同,则x可取任意值(证明略)。

但这个做法实在太麻烦了,导致coding耗费了不少时间qwq...

code

D

一道不太好想的模拟题。

最开始时,第一只稻草人肯定要尽快移动到位置0,让乌鸦开始向右移动。

之后的情况仅需要考虑当前乌鸦的左右两侧最近的两个稻草人即可。

剩下的思路就是尽可能贪心地让乌鸦尽快移动,可以根据乌鸦当前的位置提前调整后面稻草人的位置,具体细节见代码注释(实在是懒得写详细思路了qwq...)

同时有个处理细节:由于可能出现移动0.5秒的情况,而最后让输出时间的2倍。为了便于模拟,直接将所有距离相关的量扩大2倍即可,这样模拟出的时间恰对应原时间的2倍,且模拟过程中不会出现小数。

code

posted @   jxs123  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek-R1本地部署如何选择适合你的版本?看这里
· 开源的 DeepSeek-R1「GitHub 热点速览」
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
点击右上角即可分享
微信分享提示
主题色彩