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\) 可以简单的表示为:

\[C(z)=\sum_{i=1}z^i\left(\sum_{d=1}^{dm\le N}[x^iy^{dm}]\prod_{i=1}^n(1+x^{a_i}y)\right) \]

现在问题在于计算 \(\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}(F(x,y))=\sum z^j\sum_{i}(-1)^{d(i\& j)}f_{i,k}y^k \]

显然我们还是得到了一个二维多项式,且可以有 \(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}\) 就是所求系数。

code

posted @ 2024-08-18 16:13  spdarkle  阅读(21)  评论(0编辑  收藏  举报