C
可以考虑长度为 (k) 的区间右移一位造成的影响。
所以可以得到 (s_i=s_{i+k}) 这个结论,所以其实只要构造出第一个长度为 (k) 的区间即可。
对于第一个长度为 (k) 的区间上的每一位,判断能填 (0/1) 中的哪些数,如果 (0/1) 中的一个超过了 (frac{k}{2}) 或者存在矛盾就是无解。
D
考虑这个问题在链上的情况,如果说 Alice 追不上 Bob,大概是因为 (db>2 imes 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),这个图仍然是一个二分图。
所以一定可以取出 (mod n equiv 0,1,2 dots n-1) 中每个数各一次,这个值 (mod n equiv frac{n(n-1)}{2} equiv 0)。
可以这个玩意 (mod 2n) 就不一定为 (0) 了,但是可以发现全部数的总和为 (frac{2n(2n+1)}{2} equiv n pmod {2n}),所以只要取反就好了。
G
有点像网络流,而且网格图是二分图然后看起来挺可做的。
然而问题是要么左右能流要么上下能流,一看就不是很好限制。
正解是把网格图的边看成网络流中的点,网格图的边也是一个二分图,限制转化为两种边不能同时选,这个玩意就是个二分图独立集。
所以跑个网络流就行了。