CF1392G

给定一个长度为 (k)01(s,t),给定 (n) 个操作,第 (i) 个操作为交换 (s) 中的 (u_i)(v_i)

然后你选择一个区间的操作依次执行,这个区间的长度不能小于 (m)

最大化 (s)(t) 相同的位置数量。

(m,nle 10^6,kle 20)

Solution

神仙题。

(w(s,t)) 表示 (s)(t) 得到的答案。

(p(l,r)) 表示顺序操作 (l o r)

(p(r,l)) 表示顺序操作 (r o l)

性质 1

(sxrightarrow{p(l,r)}s’,txrightarrow{p(l,r)}t’,w(s,t)=w(s’,t’))

注意到每一位是独立被操作了相同的,不会改变。

所以设 (sxrightarrow{p(l,r)}s’),那么若 (s’xrightarrow{p(r+1,n)}s”,txrightarrow{p(r+1,n)}t”),则 (w(s’,t)=w(s”,t”))

同理,答案也等价于 (s’xrightarrow{p(l-1,1)}s”,txrightarrow{p(r,1)}t”) 情况下的答案。

所以我们得到了 (n) 个字符串 (s’)(n) 个字符串 (t’),我们发现问题等价于选两个下标差大于等于 (m) 的字符串并得到答案。

还是不好做。

然后观察到,所有 (s/t) 的二进制下 (1) 的个数固定,设 ( extrm{bit}(s))(a)( extrm{bit}(t)=b)( extrm{bit}(s~mathbf{and}~t)=c),那么有答案为 (k-(a-c)-(b-c)=k-a-b+2c),所以问题等价于最大化 (c)

然后维护 (f_{0,x}) 表示所有 (s_i=x) 中最小的 (i),维护 (f_{1,x}) 表示所有 (t_i=x) 中最大的 (i)

然后将他们进行子集转移,对于某个 (x),如果 (f_{1,x}-f_{0,x}ge m),那么就可以更新答案,即存在两个字符串满足其并大于等于 ( extrm{bit}(x))

复杂度为 (mathcal O(nk+2^kk))