FWT 一些问题

FWT 矩阵 C

矩阵计算方法:\(C_{x,i}\times C_{x,j}=C_{x,i\cdot j}\),其中 \(\cdot\) 为位运算。暴力跑值域 0,1,-1 的矩阵即可求得 \(C\)。也可以自己手动解方程。
记住要保证满秩。

\(C_{\operatorname{OR}}=\begin{bmatrix}1&0\\1&1\end{bmatrix},C_{\operatorname{OR}}^{-1}=\begin{bmatrix}1&0\\-1&1\end{bmatrix}\)
\(C_{\operatorname{AND}}=\begin{bmatrix}0&1\\1&1\end{bmatrix},C_{\operatorname{AND}}^{-1}=\begin{bmatrix}-1&1\\1&0\end{bmatrix}\)
\(C_{\operatorname{XOR}}=\begin{bmatrix}1&1\\1&-1\end{bmatrix},C_{\operatorname{XOR}}^{-1}=\begin{bmatrix}0.5&0.5\\-0.5&0.5\end{bmatrix}\)

FWT 的作用

每一维是独立的,也就是你可以:

  • 随意确定维度之间的顺序。
  • 随意确定每一维是什么卷积。
  • FWT 两个循环都是可以以任意顺序进行的。
for(int i=0;i<W;i++)
	for(int s=0,x,y;s<(1<<W);s++)
		if(!(s>>i&1))
			x=f[s],y=f[s|1<<i],
			f[s]=(x*C[0][0]+y*C[0][1])%P,
			f[s|1<<i]=(x*C[1][0]+y*C[1][1])%P;
  • FWT 是线性变换。

这里,XOR 卷积的性质比较好。

  • XOR 的 IFWT 等于 FWT 后乘上 \(2^{-W}\)
  • \(\mathtt{XORFWT}_t=\sum_{i=0}^{2^{W}-1} (-1)^{\operatorname{pop}(i\&t)}\times a_i\)

所以我们进行一些 XOR 卷积的讨论。

CF2096H Wonderful XOR Problem

考虑 \(\mathtt{FWT}_t=\prod_{i=1}^n (\sum_{j=l}^r (-1)^{\operatorname{pop}(j\&t)})=\prod_{i=1}^n (f_{r,t}-f_{l-1,t})\)
\(\operatorname{lowbit}_t=m\),有 \(f_{x,t}=\sum_{a,w,c} 2^{w-c}\sum_{j=0}^c (-1)^j\binom{c}{j}=\sum_{a,w,c}2^w[c=0]\),其中 \(a,w,c\) 代表 \(x\) 划分为若干个 \([a,a+2^w)\) 的分解,\(c\)\(t\)\([0,w)\) 位中 1 的个数。

先给 \(l,r\) 加一。
那么这个东西显然可以按照 \(m\) 分类,于是 \(\mathtt{FWT}_t=\prod_{i=1}^n (a_i(-1)^{\operatorname{pop}(r\&t)}+b_i(-1)^{\operatorname{pop}((l-1)\&t)})\),其中 \(a_i,b_i\) 是只保留 \(0\sim m\) 位的 \(r,l-1\)
注意对于第 \(m\) 位他的系数是 \((-1)^{\operatorname{pop}((r-2^m)\& t)}\),所以若存在第 \(m\) 位就给他减掉 \(2^{m+1}\)
转回去等于:\(\prod_{i=1}^{n} (a_ix^r+b_ix^{l-1})=\prod_{i=1}^n x^r(a_i+b_ix^{(l-1)\oplus r})\)

\(x^r\) 等于全局偏移量,那么我们等于计算 \(\prod_{i=0}^{2^W-1}(a_i+b_ix^i)\),可以 FWT 维护。考虑我们 FWT 的时候需要维护 \(\mathsf{x,-x}\),实际上这个 - 的意义可以是 \(a_i-b_i\)
将 FWT 修改一下,我们维护 \(f_s,g_s\) 分别表示 \(\mathsf{x,-x}\),转移的时候,\(g\) 的转移是对称的。复杂度 \(O(m^22^m)\)

AT_abc367_g [ABC367G] Sum of (XOR^K or 0)

\(\mathtt{FWT}_t=\prod_{i=1}^n (1+(-1)^{\operatorname{pop}(a_i\& t)}y)=(1-y)^{A_t}(1+y)^{n-A_t}\)
\(y\) 这一维我们做 \(\bmod\ y^{M}-1\) 的循环卷积。预处理 \((1-y)^i,(1+y)^i\),然后合并的时候求一下 \([y^0]\) 就好了。
复杂度 \(O(nm+2^Wm)\)

P7526 Virtual Self

答案等于 \([y^m]\prod_{i=0}^{2^w-1}(\frac{(1+y)^{v_i}-(1-y)^{v_i}}{2}\times x^{i}+\frac{(1+y)^{v_i}+(1-y)^{v_i}}{2})\),其中 \(x\) 维做 xor 卷积,\(y\) 维做加法卷积。

进行 FWT,求出每个位置点值:
\(\mathtt{FWT}_i=\prod_{j=0}^{2^w-1}(\frac{(1+y)^{v_i}-(1-y)^{v_i}}{2}\times (-1)^{\operatorname{pop}(i\&j)}+\frac{(1+y)^{v_i}+(1-y)^{v_i}}{2})\)

显然可以按照 \(\operatorname{pop}(i\&j)\) 奇偶性分类,得到:
\(\mathtt{FWT}_i=[y^m](1+y)^a(1-y)^{(\Sigma v)-a}=\sum_{i=0}^m (-1)^i\binom{a}{i}\binom{\Sigma v-a}{m-i}=a!\sum_{i=0}^m\frac{(-1)^i}{i!(m-i)!}\frac{(n-a)^{\underline{m-i}}}{(a-i)!}=\frac{a}{(\Sigma v)^{\underline a}}\sum_{i=0}^m \frac{(-1)^i}{i!(m-i)!}\frac{(\Sigma v)^{\underline{m+(a-i)}}}{(a-i)!}\)

考虑到这个式子是关于 \(a\)\(m\) 次多项式,那么可以求出前 \(m+1\) 项进行插值。(这个到卷积的转化我不太会啊,ctj 的)

求出每个位置的点值。最后代一遍 IFWT 即可。

CF1906K Deck-Building Game

我们可以考虑从 \(A\bigcup B=S\) 处分割成两个集合使得满足条件。
也就是 \(\bigoplus_{i\in S} a_i=0\),方案数是 \(2^{|S|}\)
那么求 \(\prod (1+2x^{a_i})\),容易做啦。

CF1119H Triple

第一个转化,\(xu^{a_i}+yu^{b_i}+zu^{c_i}=u^{a_i}(x+yu^{a_i\oplus b_i}+zu^{a_i\oplus c_i})\)
\(\mathtt{FWT}_t=\prod (x+y(-1)^{\operatorname{pop}(t\&b'_i)}+z(-1)^{\operatorname{pop}(t\&c'_i)})\)
考虑计算 4 类的答案,设 \(cnt_{-1,-1}=a,cnt_{-1,1}=b,cnt_{1,-1}=c,cnt_{1,1}=d\)
考虑:

  • \(a+b+c+d=n\)
  • \((b',c')\) 放入 \(o_{b'}\),得到 \(c+d-a-b\)
  • \((b',c')\) 放入 \(o_{c'}\),得到 \(b+d-a-c\)
  • \((b',c')\) 放入 \(o_{b'\oplus c'}\),得到 \(a+d-b-c\)

解方程啦。

posted @ 2026-01-10 06:42  TallBanana  阅读(1)  评论(0)    收藏  举报