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

有点像网络流,而且网格图是二分图然后看起来挺可做的。

然而问题是要么左右能流要么上下能流,一看就不是很好限制。

正解是把网格图的边看成网络流中的点,网格图的边也是一个二分图,限制转化为两种边不能同时选,这个玩意就是个二分图独立集。

所以跑个网络流就行了。

posted @ 2020-09-17 11:08  skyh  阅读(654)  评论(3编辑  收藏  举报