ABC 367 G 题解
ABC367G
神奇题目
场上想到了引入多元生成函数之后就嗝屁了。
定义两个多项式的运算 \(A(z)*B(z)=\sum_{i}\sum_{j}z^{i\oplus j}a_ib_j\),也就是异或卷积。
定义两个二元生成函数 \(A(x,y)*B(x,y)=\sum_{i,p}\sum_{j,q}x^{i\oplus j}y^{p+q}a_{i,p}b_{j,q}\)
我们仍然选用 \(\prod\) 计算连续的 \(*\) 积
显然 \(k\) 很大,我们需要求出每个 \(xor\) 和的出现次数 \(c_i\)
而 \(c_i\) 可以简单的表示为:
现在问题在于计算 \(\prod(1+x^{a_i}y)\)
这其实是 \(FWT\) ,而我们考虑计算其卷积,最后 \(IFWT\)
如果我们先不考虑 \(y\) 的影响,那么有 \(FWT(1+x^{a_i})=FWT(1)+FWT(x^{a_i})\) 计算结果中的第 \(j\) 项系数为 \(2[d(a_i\& j)=0]\),也就是二进制 \(\&\) 有偶数个 \(1\) 的位置为 \(2\),否则为 \(0\)。
根据这个我们可以计算 \(\prod(1+x^{a_i})\),具体的我们考虑一个 DP \(f_{i,0/1}\) 表示所有数中 \(\& i\) 有偶数/奇数个 \(1\) 的数的个数,还原每一项即可。事实上有 \(f_{i,0}+f_{i,1}=N\)
但是带上了 \(y\) 怎么办。实质上是把 \(y^{dm}\) 的项拿出来。对于 \(x^i\) 而言,如果 \(d(i\& j) =0\) ,那么就有选它,值增加一,或者不选它,如果 \(d(i\&j)=1\),就有选它,值减少一,或者不选它。选了的话选了的个数就会增加。
而 \(y\) 的实质是记录选了的个数,所以对应了 \((1+y),(1-y)\) 的两个决策。
所以实际上拿出 \(x_i\) 后 \(y\) 的系数是一个多项式 \((1+y)^{f_{i,0}}(1-y)^{f_{i,1}}\)。甚至我们可以据此定义广义的 \(FWT\)(第一维 \(xor\),第二维多项式积)
显然我们还是得到了一个二维多项式,且可以有 \(FWT_{ex}(1+x^{a_i}y)=\sum z^k+\sum_{z^k}{(-1)^{d(k\& a_i)}}y\)
也可以佐证上述结论。
所以我们对于每个 \(x^i\),拿出 \(y^{dm}\) 的系数后就可以做 \(IFWT\) 得到 \(C(z)\) 了。
怎么拿?不妨设 \(dp1_{i,j}\) 为 \((1+y)^i\) 中 \(y^{k},k\bmod m=j\) 的系数,\(dp2_{i,j}\) 为 \((1-y)^i\) 中 \(y^k,k\bmod m=j\) 的系数。
那么 \(\sum dp1_{f_{i,0},j}dp2_{f_{i,1},(-j)\bmod m}\) 就是所求系数。