A. LCM Problem
若(a < b),则(LCM(a,b))是(a)的整数倍且(LCM(a,b) e 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) ext{ } mod ext{ } w)。
题目转换成寻找满足(yd+x = xd+y ext{ } (mod ext{ } w))的((x, y))。
移项并化简后得到((x - y)(d - 1) = 0 ext{ } (mod ext{ } w))。
由于((d-1))是常数并且可能包含(w)的某些因子,所以可以将用(w^{prime}= frac{w}{gcd(d-1,w)})来替代(w),从而消除上述公共因子的影响。
现在的式子为((x - y)(d - 1) = 0 ext{ } (mod ext{ } w^{prime})),其中((d-1)和w^{prime})没有公共因子。由此,只需要找到满足((x - y) = 0 ext{ } (mod ext { } 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 imes w^{prime})即可。
易得,对于固定的(k=x-y),(k)对答案的贡献为(min(m,d)-k)。所以,最终答案为
很明显,这个式子等差,可以用高斯求和公式在(O(1))的时间内计算。
计算过程可能会炸精度,偷懒用了py写。