CF 思维题随记
CF1487B Cat Cycle
首先猫 A 的行动是确定的,我们可以先算出它走的圈数和最终的位置,然后根据 \(n\) 分类讨论:
- 偶数。不会相遇,猫 B 最终在猫 A 对称的位置。
- 奇数。如果猫 A 不动那么猫 B 每圈只需要走 \(n-1\) 步。猫 A 会动其实就是猫 A 每多走一圈,两猫就多相遇一次,猫 B 就少走一步。将猫 A 走的圈数加到猫 B 的总步数里,判断最后一圈是否会相遇即可。
算最终位置时有个小技巧,先 \(-1\) 再取模再 \(+1\) 就不用特判 \(0\) 了。
CF1487C Minimum Ties
将所有球队看成一个环,方便我们后续处理。
对于球队数量为奇数的情况,钦定每支球队都胜后面一半的球队,负前面一半的球队即可。
偶数的情况比较麻烦。首先胜负数量不平等一定存在平局,而仅靠胜负不可能凑出平局的分数,所以最优情况是每支球队恰好平局一次。
钦定相邻的球队两两平局,注意这样 \(n=4\) 时剩下的关系不能套用奇数的情况。因为相邻编号奇偶性不同,所以可以根据两支球队编号异或后的奇偶性决定胜负,更加优美。
CF814B An express train to reveries
保证有解大大降低了代码难度。
显然最多有两个位置不同且其余位置一定与排列相同,否则根据鸽巢原理一定有一个序列不同位置超过一个:
- 仅有一个位置不同。将排列中没有出现过的那个数丢到这个位置即可。
- 有两个位置不同。这两个位置分别与两个序列相同,判断是否是没有出现过的两个数即可。
CF1632C Strange Test
因为或操作会使 \(a\geq b\),所以最多使用一次,且之后只会增加 \(b\)。
所以在或操作后增加 \(b\) 必定可以换成在或操作前增加 \(b\)。问题转化成了至少增加 \(a,b\) 几次使得 \(a\) 是 \(b\) 的子集。
设 \(b\) 最高在第 \(j\) 位大于 \(a\),\(a\) 最高在第 \(i\) 位大于 \(b\),考虑第 \(i\) 位的最终状态:
- \(a\) 的第 \(i\) 位从 \(1\) 变成了 \(0\)。\(a\) 必定发生了第 \(i\to j\) 位的进位,\(1\sim i\) 位均为 \(0\),\(b\) 不需要增加。
- \(a\) 的第 \(i\) 位仍然为 \(1\)。由于 \(a\) 没有进位,两者在 \(1\sim i\) 位必须完全相同,所以 \(a\) 不需要增加。
两种方案以及 \(b-a\) 三者取 \(\min\) 即可,时间复杂度 \(O(\log b)\)。
CF1467B Hills And Valleys
一座山只可能修改成其左侧或右侧山的高度,这样能够在当前山不成为山峰或山谷的前提下让两侧山尽可能不成为山峰或山谷。其余情况并不会逆转其与两侧山的相对大小(等于被修改甚至更劣),修改成在两侧山之间的高度还会让当前山成为山峰或山谷。
修改第一或最后一座山也是无意义的,完全可以将第二/倒数第二座山修改成第三/倒数第三座山的高度。小于三座山时本来就没有山峰和山谷。
CF1470B Strange Definition
\(\frac{\operatorname{lcm}(x,y)}{\gcd(x,y)}\) 中每种质因子的数量其实就是该质因子在 \(x,y\) 中的数量之差。该式子为完全平方数的条件也就是每种质因子在 \(x,y\) 中出现次数的奇偶性相同。而这东西是有传递性的,我们可以把数据此划分成若干个集合,集合内的数两两均有关联。用出现次数为奇数的质因子乘积即可很好地区分不同的集合。
显然经过第一秒集合内的数会变得相同,且质因子出现次数只存在集合大小为偶数的奇变偶的情况。所以大小为奇数的集合始终保持独立,大小为偶数的集合在第一秒会全部合并到一起。分 \(w=0\) 和 \(w>0\) 讨论即可。