CF668 题解
C
可以考虑长度为 \(k\) 的区间右移一位造成的影响。
所以可以得到 \(s_i=s_{i+k}\) 这个结论,所以其实只要构造出第一个长度为 \(k\) 的区间即可。
对于第一个长度为 \(k\) 的区间上的每一位,判断能填 \(0/1\) 中的哪些数,如果 \(0/1\) 中的一个超过了 \(\frac{k}{2}\) 或者存在矛盾就是无解。
D
考虑这个问题在链上的情况,如果说 Alice 追不上 Bob,大概是因为 \(db>2 \times da\),这样的话 Bob 可以在 Alice 来了之后马上跑路。
如果 \(db\) 可能会大于 \(n-1\),只要把 \(db\) 对 \(n-1\) 取 \(\min\) 就行了。
对于树上的情况,只需要把 \(db\) 对树的直径取 \(\min\)。
因为 Alice 先手,需要特判 Alice 可以一步追到 Bob 的情况。
E
如果只有一次询问操作,考虑怎么做这个东西。
仔细思考一下,如果一个比较靠后的数当前没有消掉,那么之后一定再也消不掉了。
所以最优策略就是每次取最后一个能消掉的,这里我只会用分块去找到最后一个合法的位置。
对于询问的限制,首先右端点可以直接用数据结构维护,其实左端点只要用类似扫描线的思想也是能做的。
F
如果 \(n\) 是偶数,可以选择 First 并把 \(i\) 和 \(i+n\) 分到一组去。
这样的话得到的结果一定是 \(\frac{n(n+1)}{2}+kn \equiv \frac{n}{2} \pmod n\)。
如果 \(n\) 是奇数,选择 Second。
可以把给出的点对连上边,再把 \(i\) 与 \(i+n\) 连上边,这样就可以发现每个点的度数都是 \(2\),这个图仍然是一个二分图。
所以一定可以取出 \(\bmod n \equiv 0,1,2 \dots n-1\) 中每个数各一次,这个值 \(\bmod n \equiv \frac{n(n-1)}{2} \equiv 0\)。
可以这个玩意 \(\bmod 2n\) 就不一定为 \(0\) 了,但是可以发现全部数的总和为 \(\frac{2n(2n+1)}{2} \equiv n \pmod {2n}\),所以只要取反就好了。
G
有点像网络流,而且网格图是二分图然后看起来挺可做的。
然而问题是要么左右能流要么上下能流,一看就不是很好限制。
正解是把网格图的边看成网络流中的点,网格图的边也是一个二分图,限制转化为两种边不能同时选,这个玩意就是个二分图独立集。
所以跑个网络流就行了。