Codeforces 题目选做 III
feecle6418 · · 个人记录
补两个月前的笔记。
Anti-theft Road Planning
真 试错 + Brainstorm。显然是要给每个位置赋个权值
考虑一维情况怎么构造,经过一些试验发现格雷码的递归构造方法能达到理论下界(最小化 1 在最高位的个数,然后递归下去)。因此考虑在二维上也用类似的递归,把整个区域分为 4 块,每块递归,并适当反转每块内部,使得接口处 xor 最小。
具体构造可见 https://codeforc.es/problemset/submission/1673/155417304
Power or Xor?
根据套路,先枚举一段连续的 power,算它对答案的贡献。可以发现,power 超过了
接着,要算这一段对答案贡献的奇偶性。可以发现就是算
Cut
注意到如果
接着要求每个左端点最远能到哪里,可以双指针。
Cut and Stick
如果整个区间中出现次数最多的数出现也不超过一半,答案就是 1;否则,设其出现次数为
如果存在这样的
还有一种比较高明,而且能拓展到任意
Baby Ehab's Hyper Apartment
看到
第一步:找出一条哈密顿链。考虑使用类似插入排序的方法,二分答案,找到最靠右的
然后考虑从后往前(这里要试错)双指针,求出当前后缀最远的返祖边。
Omkar and Forest
注意到如果一个位置不是 0,它的值就是确定的。
故答案是
Omkar and Akmar
终态具有以下性质:
- 不存在长度 >=1 的空格段。
- 去掉空格后相邻两位置颜色不同。
由第二点可知后手必胜,且无论怎么放都是最优策略。
枚举最终有
Phoenix and Socks
首先把已经配对的删掉。现在剩下的有同色同左右,异色异左右,异色同左右。每一对最后一种需要 2 的代价,其它都只要 1。
不妨假设左袜子数量大于右袜子数量,右袜子肯定尽量去配左边数量是奇数的袜子,把它们全配成偶数。配得越多 2 越少。
Phoenix and Computers
从前往后 dp,只需要记录
还有一个类似于 ZJOI2012 波浪那题的做法(维护一些有序但不确定段间距离的全部开启的连续段),只用记录段数和总电脑数,可以做到
Phoenix and Bits
不妨假设操作都对 trie 的子树进行。否则拆开成 log 个。
xor 操作,对于低位的影响可以直接在 trie 上打标记,对于高位改变就暴力 trie 合并。
and or 更暴力,找到所有会产生合并的位(可以 pushup 时顺便更新,xor 不影响这个),然后内部暴力合并,外部也暴力合并。
复杂度是 2log。
Colors and Intervals
这题有 educational intuition。
考虑递归,每次让
Telepanting
为啥才 *2200 啊???做了至少一个多小时吧。。。
注意到如果走到
设
Two Houses
由兰道定理,仅从入度或出度就可以恢复出每个强连通分量,故只需要 0 次询问。
Christmas Game
阶梯博弈模板,维护模