CF582E Boolean Function
四元组 \((A,B,C,D)\) 的情况只有 \(16\) 种,将每种情况的函数值进行状压,在表达式建出的二叉树上进行 \(DP\),合并子树为对应的卷积。
链接
CF449D Jzzhu and Numbers
先做集合交卷积的莫比乌斯变换,然后快速幂计算选出非空子集的方案数,然后再莫比乌斯反演回去即可。本质为高维前缀和。
链接
CF1392G Omkar and Pies
设两个串分别为 \(s,t\),每个操作,也就是置换(对换)为 \(f_i\),定义置换的左作用 \(\cdot\),得答案为:
\[\large k - d \left( \left( f_r \circ f_{r-1} \circ \cdots \circ f_{l+1} \circ f_l \right) \cdot s, t \right)
\]
其中 \(d(s,t)\) 表示 \(s,t\) 的汉明距离,即为对应位不同字符个数,进一步得:
\[\large\begin{aligned}
&d \left( \left( f_r \circ f_{r-1} \circ \cdots \circ f_{l+1} \circ f_l \right) \cdot s, t \right)\\
=& d \left( s, \left( f_r \circ f_{r-1} \circ \cdots \circ f_{l+1} \circ f_l \right)^{-1} \cdot t \right) \\
=& d \left( s, \left( f_l^{-1} \circ f_{l+1}^{-1} \circ \cdots \circ f_{r-1}^{-1} \circ f_r^{-1} \right) \cdot t \right) \\
=& d \left( \left( f_1^{-1} \circ f_2^{-1} \circ \cdots \circ f_{l-1}^{-1} \right) \cdot s, \left( f_1^{-1} \circ f_2^{-1} \circ \cdots \circ f_r^{-1} \right) \cdot t \right)
\end{aligned}
\]
设 \(s_i=\left( f_1^{-1} \circ f_2^{-1} \circ \cdots \circ f_i^{-1} \right) \cdot s,t_i=\left( f_1^{-1} \circ f_2^{-1} \circ \cdots \circ f_i^{-1} \right) \cdot t\),问题就转化为求:
\[\large \min_{j-i\geqslant m}d(s_i,t_j)
\]
因为 \(d(s,t)=|S \oplus T|=|S|+|T|-2|S \cap T|\),所以就是最大化 \(|S \cap T|\),枚举交集 \(I\),对于 \(j-i\geqslant m\) 的限制,就是求得最小的 \(i\),使得 \(I \subseteq S_i\),最大的 \(j\),使得 \(I \subseteq T_j\)。这里是子集的最大最小值,用莫比乌斯变换预处理即可。
链接
[HAOI2015] 按位或
先 \(\min-\max\) 容斥,转为求 \(E(\min(S))\),\(\min(S)\) 为集合 \(S\) 中出现第一个元素的时间,得:
\[\large\begin{aligned}
E(\min(S))&=\sum_{i=1}^\infty iP(\min(S)=i)\\
&=\sum_{i=1}^\infty i(\sum_{S \cap T=\varnothing}p_T)^{i-1}(1-\sum_{S \cap T=\varnothing}p_T)\\
&=\sum_{i=1}^\infty i(\sum_{S \cap T=\varnothing}p_T)^{i-1}-i(\sum_{S \cap T=\varnothing}p_T)^i\\
\end{aligned}
\]
即求形如 \(\sum\limits_{i=1}^\infty ip^i\) 的式子,应用扰动法得:
\[\large\begin{aligned}
&\sum_{i=1}^\infty ip^i\\
=&\sum_{i=0}^\infty (i+1)p^{i+1}\\
=&p\sum_{i=1}^\infty ip^i+\sum_{i=0}^\infty p^{i+1}\\
\end{aligned}
\]
得 \(\sum\limits_{i=1}^\infty ip^i=\frac{p}{(1-p)^2}\),代入得:
\[\large E(\min(S))=\frac{1}{1-\sum\limits_{S \cap T=\varnothing}p_T}
\]
莫比乌斯变换求子集和即可。
还有一种解法:
将 \(p\) 看作集合幂级数,应用集合并卷积,得期望时间为:
\[\large f=\sum_{i=1}^\infty i(p^i-p^{i-1})
\]
这个集合幂级数全集的那一项,莫比乌斯变换得:
\[\large \large \hat f_S=\sum_{i=1}^\infty i(\hat p^i_S-\hat p^{i-1}_S)
\]
应用刚才的推导不难得:
\[\large \hat f_S =
\begin{cases}
\frac{1}{\hat p_S-1} & \hat p_S < 1 \\
0 & \hat p_S = 1 \\
\end{cases}
\]
然后再莫比乌斯反演即可。
链接
[NOI Online #3 提高组] 优秀子序列
所求即为选出两两按位与为 \(0\) 的集合,求集合权值和为 \(s\) 的方案数。
选出两两按位与为 \(0\) 的集合其实就是子集卷积,然后 \(\exp\) 即可求集合权值和为 \(s\) 的方案数。
链接
[CEOI2019] Amusement Park
发现对于任何一种 \(DAG\) 的方案,将所有边进行翻转后仍为 \(DAG\),设 \(f_S\) 为集合 \(S\) 中的点构成的导出子图为 \(DAG\) 的方案数,答案即为 \(\frac{1}{2}mf_U\)。
设 \(a_S\) 表示 \(S\) 集合是否为独立集,其取值为 \(0\) 或 \(1\),用莫比乌斯变换求子集和即可计算 \(a_S\)。发现直接做会算重,需要容斥:
\[\large f_S=\sum_{T \subseteq S}(-1)^{|T|-1}a_Tf_{S-T}
\]
考虑怎么得到的容斥系数,设容斥系数为 \(f(i)\),发现 \(f(i)=(-1)^{i-1}\) 恰好满足要求,得:
\[\large\begin{aligned}
&\sum_{i=1}^n\binom{n}{i}f(i)\\
=&\sum_{i=1}^n\binom{n}{i}(-1)^{i-1}\\
=&-\left(\sum_{i=0}^n\binom{n}{i}(-1)^i-\binom{n}{0}(-1)^0\right)\\
=&1
\end{aligned}
\]
设 \(g_S=\sum\limits_{T \subseteq S}(-1)^{|T|-1}a_T\),将乘法定义为子集卷积,得:
\[\large\begin{aligned}
f&=fg+1\\
f&=\frac{1}{1-g}
\end{aligned}
\]
求逆即可。
链接
集合划分计数
定义乘法为子集卷积,所求即为:
\[\large g=\exp\limits_{\leqslant k}f=\sum_{i=0}^k\frac{f^i}{i!}
\]
直接做是 \(O(n^32^n)\) 的,根据 \({g}'={f}'(g-\frac{f^k}{k!})\) 做,就是 \(O(n^22^n)\) 了。
链接
[JOI 2018 Final] 毒蛇越狱
设询问中 \(0,1,?\) 的个数分别为 \(c_0,c_1,c_2\)。直接的暴力就是枚举 \(?\) 的情况,复杂度为 \(O(q2^{c_2})\)。若不存在 \(1\),将 \(?\) 看作 \(1\),计算子集和即可,若有 \(1\),进行容斥,复杂度为 \(O(q2^{c_1})\)。若不存在 \(0\),将 \(?\) 看作 \(0\),计算超集和即可,若有 \(0\),进行容斥,复杂度为 \(O(q2^{c_0})\)。根据 \(c_0,c_1,c_2\) 的大小选择做法,得复杂度为 \(O(n2^n+q2^{\left\lfloor\frac{n}{3}\right\rfloor})\)。
链接
[AGC034F] RNG and XOR
正难则反,设初始状态为 \(i\),目标状态为 \(0\),期望次数为 \(E_i\),其中 \(E_0=0\),\(p_i=\frac{a_i}{\sum\limits_j a_j}\),得:
\[\large E_i=1+\sum_{j=0}^{2^n-1}p_jE_{i \oplus j}\quad \left( n \neq 0 \right)
\]
发现其为集合对称差卷积,构造集合幂级数,设:
\[\large E(x)=\sum_{i=0}^{2^n-1}E_ix^i,P(x)=\sum_{i=0}^{2^n-1}p_ix^i,I=\sum_{i=0}^{2^n-1}x^i
\]
根据转移有:
\[\large E(x)=I+E(x)P(x)+cx^{\varnothing}
\]
最后一项是为了满足 \(n=0\) 时的情况,进行 \(FWT\) 得:
\[\large\begin{aligned}
\hat E(x)&=2^nx^{\varnothing}+\hat E(x)\hat P(x)+cI\\
\hat E(x)(I-\hat P(x))&=2^nx^{\varnothing}+cI\\
\left[x^\varnothing\right]\hat E(x)(1-[x^\varnothing]\hat P(x))&=2^n+c\\
\left[x^\varnothing\right]\hat E(x)\left(1-\sum_{i=0}^{2^n-1}p_i\right)&=2^n+c\\
\end{aligned}
\]
等号左边的项为 \(0\),得 \(c=-2^n\),代入后提取第 \(x^S\ \left( S \neq \varnothing \right)\) 项系数得:
\[\large\begin{aligned}
\hat E(x)\left(\hat P(x)-I\right)&=2^n(I-x^{\varnothing})\\
\left[x^S\right]\hat E(x)\left(\left[x^S\right]\hat P(x)-1\right)&=2^n\\
\end{aligned}
\]
不难发现 \(\left[x^S\right]\hat P(x) \neq 1\),得:
\[\large \left[x^S\right]\hat E(x)=\frac{2^n}{\left[x^S\right]\hat P(x)-1}
\]
\(IFWT\) 后提取第 \(x^\varnothing\) 项系数得,:
\[\large \sum_{i=0}^{2^n-1}\left[x^i\right]\hat E(x)=2^nE_0=0
\]
然后就能解出 \(\left[x^\varnothing\right]\hat E(x)\) 了,求出 \(\hat E(x)\) 后 \(IFWT\) 即可。
链接
CF1119H Triple
由题意得到 \(n\) 个集合幂级数,其中 \(f_i\) 满足 \(f_{i,a_i}=x,f_{i,b_i}=y,f_{i,c_i}=z\)。将 \(n\) 个幂级数进行异或卷积即可得到答案,但直接卷积复杂度无法接受。
发现每个幂级数都只有三个非零项,对其进行 \(FWT\) 得:
\[\large \hat f_{i,S}=\sum_{T\subseteq 2^U}(-1)^{|S \cap T|}f_{i,T}=(-1)^{|S \cap a_i|}x+(-1)^{|S \cap b_i|}y+(-1)^{|S \cap c_i|}z
\]
设最后所求的幂级数为 \(f\),得:
\[\large \hat f_S=\prod_{i=1}^n\hat f_{i,S}=\prod_{i=1}^n(-1)^{|S \cap a_i|}x+(-1)^{|S \cap b_i|}y+(-1)^{|S \cap c_i|}z
\]
为简化问题,将三元组 \(\{ a_i,b_i,c_i \}\) 转化为 \(\{ 0,b_i \text{xor} a_i,c_i \text{xor} a_i \}\),最后统计答案时,将幂级数对应的下标异或上 \(\text{xor}_{i=1}^n a_i\) 即可。这样的话,\((-1)^{|S \cap a_i|}x+(-1)^{|S \cap b_i|}y+(-1)^{|S \cap c_i|}z\) 就只有四种可能的取值了:
\[\large x+y+z,
x+y-z,
x-y+z,
x-y-z
\]
求出每种出现次数,快速幂就能求出 \(\hat f_S\) 了。设每种出现次数分别为 \(c_1,c_2,c_3,c_4\)。显然有 \(c_1+c_2+c_3+c_4=n\)。
考虑三个幂级数 \(g_1,g_2,g_3\),其分别满足:
\[\large g_{1,S}=\sum_{i=1}^n[b_i=S],g_{2,S}=\sum_{i=1}^n[c_i=S],g_{3,S}=\sum_{i=1}^n[b_i\text{xor}c_i=S]
\]
对其进行 \(FWT\),不难发现:
\[\large
\hat{g}_{1,S}=c_1+c_2-c_3-c_4,
\hat{g}_{2,S}=c_1-c_2+c_3-c_4,
\hat{g}_{3,S}=c_1-c_2-c_3+c_4
\]
根据方程解出 \(c_1,c_2,c_3,c_4\) 即可。
链接
CF772D Varying Kibibits
发现 \(f\) 这个函数的按位取 \(\min\),其实就是十进制下的按位与,那么先做十进制的莫比乌斯变换,计算超集和。考虑如何统计答案,现在要计算的即为:
\[\large \sum_{T \subseteq S}\left( \sum_{i \in T} a_i\right)^2
\]
也就是集合中所有子集的和的平方,考虑两个元素 \(i,j\) 的贡献,不难得:
\[\large\begin{aligned}
&\sum_{T \subseteq S}\left( \sum_{i \in T} a_i\right)^2\\
=&2^{|S|-2}\sum_{i \in S}\sum_{j \in S \and i \neq j}a_i a_j+2^{|S|-1}\sum_{i \in S} a_i^2\\
=&2^{|S|-2}\sum_{i \in S}\sum_{j \in S \and i \neq j}a_i a_j+2^{|S|-2}\sum_{i \in S} a_i^2+2^{|S|-2}\sum_{i \in S} a_i^2\\
=&2^{|S|-2}\left( \sum_{i \in S} a_i\right)^2+2^{|S|-2}\sum_{i \in S} a_i^2\\
\end{aligned}
\]
莫比乌斯变换处理出 \(|S|,\sum_\limits{i \in S} a_i,\sum\limits_{i \in S} a_i^2\) 后即可计算,然后再莫比乌斯反演就为答案。
链接
[ZJOI2019] 开关
和 \([AGC034F] RNG\ and\ XOR\) 一样,设集合幂级数 \(E(x),P(x)\),由那题得 \(\left[x^S\right]\hat E(x)=\frac{2^n}{\left[x^S\right]\hat P(x)-1}\),根据本题的性质进一步推导:
\[\large\begin{aligned}
&\left[x^S\right]\hat E(x)\\
=&\frac{2^n}{\left[x^S\right]\hat P(x)-1}\\
=&\frac{2^n}{\sum\limits_{i=1}^n(-1)^{|S \cap \{ i\}|}p_i-1}\\
=&\frac{-2^n}{2\sum\limits_{i\in S}p_i}\\
\end{aligned}
\]
得答案为:
\[\large\begin{aligned}
&\frac{1}{2^n}\sum_T(-1)^{|S \cap T|}\left[x^T\right]\hat E(x)\\
=&\frac{1}{2^n}\left(\sum_{T\neq \varnothing}(-1)^{|S \cap T|}\left[x^T\right]\hat E(x)+\left[x^\varnothing\right]\hat E(x)\right)\\
=&\frac{1}{2^n}\left(\sum_{T\neq \varnothing}(-1)^{|S \cap T|}\frac{-2^n}{2\sum\limits_{i\in T}p_i}+\sum_{T\neq \varnothing}\frac{2^n}{2\sum\limits_{i\in T}p_i}\right)\\
=&\sum_{T\neq \varnothing}\frac{(-1)^{|S \cap T|+1}+1}{2\sum\limits_{i\in T}p_i}\\
=&\sum_T\frac{\left[ |S \cap T| \equiv 1 \pmod{2} \right]}{\sum\limits_{i\in T}p_i}\\
\end{aligned}
\]
发现 \(\sum\limits_{i=1}^n p_i\) 很小,对其做背包计数即可计算答案,背包过程需记录 \(|S \cap T|\) 的奇偶性。
链接
[PKUWC2018] 随机游走
先 \(\min-\max\) 容斥,转为求 \(E(\min(S))\),即从根到点集 \(S\) 中第一个点的期望步数。
枚举当前考虑的点集 \(S\),设 \(f_x\) 为 \(x\) 到点集 \(S\) 中第一个点的期望步数,\(d_x\) 为 \(x\) 的度数,若 \(x\in S\),则有 \(f_x=0\),否则有:
\[\large f_x=1+\frac{1}{d_x}\sum_{i=1}^{d_x} f_{y_i}
\]
直接高斯消元是 \(O(n^3)\) 的,有一个树上消元的技巧能快速计算,将每个点的 \(DP\) 值用其父亲的 \(DP\) 值表示,即:
\[\large f_x=k_xf_{fa}+b_x
\]
得:
\[\large\begin{aligned}
f_x&=1+\frac{1}{d_x}\sum_{i=1}^{d_x} f_{y_i}\\
&=1+\frac{1}{d_x}\left( \sum_{y\in son}k_yf_x+b_y+f_{fa} \right)\\
&=\frac{\frac{1}{d_x}f_{fa}+\frac{1}{d_x}\sum\limits_{y\in son}b_y+1}{1-\frac{1}{d_x}\sum\limits_{y\in son}k_y} \\
\end{aligned}
\]
计算出每个点集的期望步数后,用莫比乌斯反演求子集和即可快速回答询问。
链接
[SNOI2017] 遗失的答案
将 \(n,l,x\) 都除以 \(g\),问题转化为在 \(\left[1,n\right]\) 中选数,必须选 \(x\),求选出的数 \(\gcd\) 为 \(1\),\(\text{lcm}\) 为 \(l\) 的方案数。
发现 \(l\) 最多有 \(8\) 个质因子,考虑状压。\(\left[1,n\right]\) 中每个数对应的状态为: 该数中 \(l\) 的每个质因子的指数是否为 \(0\),每个质因子的指数是否和 \(l\) 一样。选一个数就是状态按位或。
发现很多数状态一样,放到一起来考虑,并且只需考虑 \(l\) 的约数,发现有用的状态种数为 \(600\) 左右。维护前缀的 \(DP\) 值和后缀的 \(DP\) 值,就能计算强制选一个数方案数了,前缀后缀合并时为集合并卷积。
链接