2021.5.11

CF1119H加强版
这是一个非构造性做法。泰勒应天下大雨!!!!!
题目求的就是这\(n\)个方案异或卷积起来。每个方案的\(FWT\)之后的数组\(va_i\)的值只有\(2^k\)种可能,就是\(k\)\(a_i\)每个数的系数为\(1\)\(-1\)。那么如果能求出来FWT之后的数组里\(Q\)下标是第\(i\)种数的有多少种方案,就可以直接求出最终的FWT数组了。
那么对于一个\(Q\),我们要算这个位置的值每个\(a_i\)的系数是\((-1)^{s_i}\)的方案有几个。那么就是

\[c(Q,s)=\sum\limits_{i=1}^n\prod\limits_{j=1}^k[(-1)^{bitcount(Q\,and\,p_{i,j})}=(-1)^{s_j}] \]

\((-1)^{s_j}\)移过去,等号左边取值一定是\(1\)\(-1\),那么可以用\(\frac{x+1}{2}\)来代替艾弗森符号

\[c(Q,s)=\frac{1}{2^k}\sum\limits_{i=1}^n\prod\limits_{j=1}^k((-1)^{bitcount(Q\,and\,p_{i,j})+s_j}+1) \]

\(S\)\(1\)\(k\)全集,那么可以继续化

\[c(Q,s)=\frac{1}{2^k}\sum\limits_{T\subseteq S}(-1)^{\sum\limits_{j\in T}s_j}\sum\limits_{i=1}^n(-1)^{\sum\limits_{j\in T}bitcount(Q\,and\,p_{i,j})} \]

FWT异或卷积基于一个很显然的结论\((-1)^{bitcount(x\,and\,(i\oplus j))}=(-1)^{bitcount(x\,and\,i)}\times(-1)^{bitcount(x\,and\,j)}\)
那么上面的式子继续化,设\(g_{i,T}\)为所有\(T\)集合里的\(j\)里所有\(p_{i,j}\)的异或和。

\[c(Q,s)=\frac{1}{2^k}\sum\limits_{T\subseteq S}(-1)^{\sum\limits_{j\in T}s_j}\sum\limits_{i=1}^n(-1)^{bitcount(Q\,and\,g_{i,T})} \]

到这里发现特别神奇的事情,最后一个求和号和FWT异或卷积正变换式子一模一样。
\(f_{T}(x)=\sum\limits_{i=1}^nx^{g_{i,T}}\),令\(g_T(x)\)\(f_T(x)\)做FWT正变换的结果,那么最后一个求和号就等于\(g_T(x)\)的第\(Q\)项系数。
那么\(c(Q,s)=\frac{1}{2^k}\sum\limits_{T\subseteq S}(-1)^{\sum\limits_{j\in T}s_j}g_T(x)[x^Q]\)
考虑前面那个求和号,他枚举的有值的\(j\)的位置既是\(T\)的子集又是\(s\)的子集,也就是说这个\(-1\)的幂次就是\(s\)\(T\)的交集,那么这也是一个异或卷积正变换的式子。前面还有一个\(\frac{1}{2^k}\),这就是逆变换。那么\(c(Q,s)\)就相当于是把\(g\)的函数下标和\(x\)的幂次交换之后的集合幂级数做一个FWT异或卷积逆变换。后面就把贡献乘到一起,再做一个IFWT就能得到最终的答案里。时间复杂度\(O(2^{m+k}(m+k)+n2^k)\)
还有个小优化,可以通过把每个\(p_{i,j}\)异或上\(p_{i,0}\),这样\(s_0\)就确定一定是\(0\)了,只要把答案最后异或上所有的\(p_{i,0}\)即可,这样时间复杂度里的\(k\)全可以替换为\(k-1\)

posted @ 2021-05-11 22:32  Lebron_Durant  阅读(100)  评论(0)    收藏  举报