集合幂级数杂题

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\) 值,就能计算强制选一个数方案数了,前缀后缀合并时为集合并卷积。

链接

posted @ 2021-01-16 22:14  lhm_liu  阅读(486)  评论(2编辑  收藏  举报