20ZR提高组十联测 Day3

cut

没啥意义吧。就是一个图一定可以分成两个点集,之间的边个数一定可以超过总边数一半,正确性显然。

necklace

wyz 神仙吊打 std。举一个 k = 2 k=2 k=2 的栗子。

000 -> 111
001 -> 100
00101 -> 10100

如果将连续的 k k k 个相同数称为合法串,那么合法串是可以任意移动的。而且你可以同时移动初始串和目标串中的合法串,因为操作是可以逆的。所以求一下 S S S T T T 的合法串个数,如果相同那么一定有方法把它们抵消掉,所以都删掉。这个过程可以用一个栈来线性模拟,余下的不合法串的顺序你是无法动的,所以看看相不相等即可。

count


2 ≤ n ≤ 1 0 12 , 2 ≤ m ≤ 1 0 5 2\leq n\leq 10^{12},2\leq m\leq 10^5 2n1012,2m105

对于所有必须选的位置,我们记录它们的下标,这样等差序列的公差必须是这些下标的 gcd 的约数。对于在它们之间的不可以选的点,我们就找出它们的约数,RP 算法另当别论,可以用一个约数拓扑图,就有点像 AC 自动机那个优化建图。然后我们的限制变成了必须是一个 gcd 的约数,还不能有一些因子。先遍历符合要求的公差,注意,两边还会有些不能选的位置,只不过我们可以扩展到某一个位置停下来。假设必须选的两个边界是 ( l , r ) (l,r) (l,r) 来考虑 l l l 左边,那么 l l l 必须选,如果公差为 d d d 那么 d ∣ ( l − i ) d|(l -i) d(li) 都不能被选,我们要找到最右边不能被选的位置,那么我们预处理对于   m o d     l \bmod \ l mod l 属于同一剩余系的保留最靠右的就行了。

posted @ 2020-09-13 20:18  ylxmf2005  阅读(23)  评论(0)    收藏  举报