Codeforces 1389 题解(A-E)
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 \ge k\)。
UPD: D题代码被叉了,有个地方可能会出现除零错误,现在已经更新成能过的版本了。
E. Calendar Ambiguity
\(y\)月\(x\)号为第\(yd+x\)天,对应星期\((yd+x) \text{ } mod \text{ } w\)。
题目转换成寻找满足\(yd+x = xd+y \text{ } (mod \text{ } w)\)的\((x, y)\)。
移项并化简后得到\((x - y)(d - 1) = 0 \text{ } (mod \text{ } w)\)。
由于\((d-1)\)是常数并且可能包含\(w\)的某些因子,所以可以将用\(w^{\prime}= \frac{w}{gcd(d-1,w)}\)来替代\(w\),从而消除上述公共因子的影响。
现在的式子为\((x - y)(d - 1) = 0 \text{ } (mod \text{ } w^{\prime})\),其中\((d-1)和w^{\prime}\)没有公共因子。由此,只需要找到满足\((x - y) = 0 \text{ } (mod \text { } w^{\prime})\)的\((x, y)\),即\((x-y)\)应为\(w^{\prime}\)的正整数倍。
根据题意,\(x < y\)且\(x,y\)都是符合要求的月份和日期,所以\((x-y) \in [1, min(m,d)]\)。所以,可以枚举\((x-y)\)的值,计算每个对应值对答案的贡献并累加,从而得到最终的答案。
又因为\((x-y)\)应为\(w^{\prime}\)的正整数倍,所以枚举\(i \times w^{\prime}\)即可。
易得,对于固定的\(k=x-y\),\(k\)对答案的贡献为\(min(m,d)-k\)。所以,最终答案为
很明显,这个式子等差,可以用高斯求和公式在\(O(1)\)的时间内计算。
计算过程可能会炸精度,偷懒用了py写。