「UNR#2」黎明前的巧克力
解题思路
考虑一个子集 \(S\) 的异或和如果为 \(0\) 那么贡献为 \(2^{|S|}\) ,不难列出生产函数的式子,这里的卷积是异或卷积。
\[
[x^0]\prod_{i=1}^{n} (2x^{a_i}+1)
\]
因为每一项只有两项 \(x^0,x^{a_i}\) 有值,记 \(f_i(x) =2x^{a_i}+1\), \(f'_i(x)=\text{Fwt}f(x)\) ,有
\[
f_i'(x)=\sum_{S} (1+2\times(-1)^{|S\cap a_i|})x^S
\]
不难发现 \(f'_i(x)\) 的每一项不是 \(3\) 就是 \(-1\) 。
这一步比较巧妙,考虑到 \(\text{Fwt}\) 是一个线性变换,线性变换的和等于和的线性变换,我们对所有多项式求和后 \(\text{Fwt}\) ,可以解方程解出每一项由多少个 \(3\) 和多少个 \(-1\) 构成。
设 \([x^S]f_i(x)\) 由 \(k\) 个 \(-1\) 贡献得到 \(k =\frac{3n-[x^S]f_i(x)}{4}\),然后我们要求所有多项式卷积的 \(\text{Fwt}\) 后的结果,即 \([x^S]=(-1)^k+3^{n-k}\) ,最后再 \(\text{IFwt}\) 回去即可。
其实最后是不需要 \(\text{IFwt}\) 的,我们只需要求 \([x^0]F(x)\) 的值,根据 \(\text{IFwt}\) 的式子
\[
F_S=\dfrac{1}{2^n}\sum_{T}(-1)^{|S\cap T|}F'_T
\]
所以 \([x^0]F(x)\) 的值就是每一项系数加起来除一个 \(2^n\) 。
小结: 这启示我们求点值的时候要多利用性质,不能陷于套路。