墓碑密码 & FWT 复习
考虑生成函数,\(x\) 这一维是集合幂级数,记为 \(x^{i}\cdot x^j =x^{i\oplus j}\)。\(y\) 这一维是普通乘法,记为 \(y^i \cdot y^j=y^{i+j}\)。
\[\sum_{j=1}^m [x^{b_j}y^n]\prod_{i=1}^{n}(1+x^{a_i}y+y^2+x^{a_i}y^3+...)\\
=\sum_{j=1}^m [x^{b_j}y^n]\prod_{i=1}^{n}\dfrac{1}{1-y^2}(1+x^{a_i}y)\\
=\sum_{j=1}^m [x^{b_j}y^n]\dfrac{1}{(1-y^2)^n}\prod_{i=1}^{n}(1+x^{a_i}y)
\]
不妨想办法预处理 \([x^{b_j}]\displaystyle \prod_{i=1}^n(1+x^{a_i}y)\) 这个多项式的每一项,则后面乘上 \(\dfrac{1}{(1-y^2)^n}\) 是好做的。
由于“黎明前的巧克力”,考虑 FWT。先回顾一下 FWT 的本质。
定义 \(\hat F\) 是 \(F\) 的 FWT 后结果。有如下定义式:
\[\hat{F}_i=\sum_{j=0}^{2^V-1} (-1)^{|i\cap j|} F_j
\]
接下来继续推式子:
\[\sum_{j=1}^m [x^{b_j}y^n]\dfrac{1}{(1-y^2)^n}\prod_{i=1}^{n}(1+x^{a_i}y)\\
=\dfrac{1}{2^V}\sum_{j=1}^m [y^n]\dfrac{1}{(1-y^2)^n}\sum_{I=0}^{2^V-1}(-1)^{I\cap b_j}(\prod_{i=1}^{n}(1+(-1)^{a_i\cap I}y))
\]
显然需要先处理出每个 \(I\) 对应的 \(n\) 个 \((-1)^{a_i\cap I}\)。只需要知道 \(a_i\cap I\) 是偶数的数量。不妨把 \(I\to I+1\) 时 \(I\) 改变的后缀位长度 \(L\) 对 \((-1)^{a_i\cap I}\) 的影响预处理出来,把这 \(n\) 个 01 变量用 bitset 表示,只需要做 bitset 的异或后求 count 即可。
后面的式子是容易的。

浙公网安备 33010602011771号