Codeforces 1389 题解(A-D)

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<z\)时要考虑向左走的情况。

C. Good String

易得,字符串符合条件\(\Leftrightarrow\)字符串有长度为2的循环节。

然后就暴力枚举循环节,每次遍历一遍字符串计算代价,代价的最小值就是答案。

注意,仅当循环节的两个字符都一样时才可以不完全循环。

D. Segment Intersections

首先,如果\([l1,r1]\)\([l2,r2]\)相交,那么就可以不耗费步数增加\(I\)

然后,若两个线段不相交,则耗费一定的步数之后,可以到达两个线段相交的状态。

在两个线段相交但不完全相等的情况下,耗费1步可以使\(I\)增加1,直到两个线段完全相等。

最后,在两个线段完全相等之后,就只能耗费2步使\(I\)增加1。

然后,就是快乐的模拟过程了,优先使用耗费步数低的操作,直到\(I>k\)

猜你喜欢

转载自www.cnblogs.com/zengzk/p/13401553.html