AC代码
A. LCM Problem
若\(a < b\),则\(LCM(a,b)\)是\(a\)的整数倍且\(LCM(a,b) \ne a\),所以\(LCM(a,b) \ge 2a\),当且仅当\(b=2a\)时取等号。
根据这个性质,就可以让\(a=l, b = 2l\),如果符合条件就输出,否则无解。
B. Array Walk
这题暴力+贪心做。
根据贪心,答案必定取在在同一个位置左右横跳的情况下。
由于\(z\)的取值很小,所以直接枚举走到第\(i\)个位置之后左右横跳\(c\)次的收益,然后再加上走完剩余步数的收益,取最大值为答案。
注意,剩余步数为\(1\)且\(c
C. Good String
易得,字符串符合条件\(\Leftrightarrow\)字符串有长度为2的循环节。
然后就暴力枚举循环节,每次遍历一遍字符串计算代价,代价的最小值就是答案。
注意,仅当循环节的两个字符都一样时才可以不完全循环。
D. Segment Intersections
首先,如果\([l1,r1]\)和\([l2,r2]\)相交,那么就可以不耗费步数增加\(I\)。
然后,若两个线段不相交,则耗费一定的步数之后,可以到达两个线段相交的状态。
在两个线段相交但不完全相等的情况下,耗费1步可以使\(I\)增加1,直到两个线段完全相等。
最后,在两个线段完全相等之后,就只能耗费2步使\(I\)增加1。
然后,就是快乐的模拟过程了,优先使用耗费步数低的操作,直到\(I \ge k\)。
UPD: D题代码被叉了,有个地方可能会出现除零错误,现在已经更新成能过的版本了。