zoukankan      html  css  js  c++  java
  • 集合幂级数杂题

    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 ight) cdot s, t ight) ]

    其中 (d(s,t)) 表示 (s,t) 的汉明距离,即为对应位不同字符个数,进一步得:

    [largeegin{aligned} &d left( left( f_r circ f_{r-1} circ cdots circ f_{l+1} circ f_l ight) cdot s, t ight)\ =& d left( s, left( f_r circ f_{r-1} circ cdots circ f_{l+1} circ f_l ight)^{-1} cdot t ight) \ =& d left( s, left( f_l^{-1} circ f_{l+1}^{-1} circ cdots circ f_{r-1}^{-1} circ f_r^{-1} ight) cdot t ight) \ =& d left( left( f_1^{-1} circ f_2^{-1} circ cdots circ f_{l-1}^{-1} ight) cdot s, left( f_1^{-1} circ f_2^{-1} circ cdots circ f_r^{-1} ight) cdot t ight) end{aligned} ]

    (s_i=left( f_1^{-1} circ f_2^{-1} circ cdots circ f_i^{-1} ight) cdot s,t_i=left( f_1^{-1} circ f_2^{-1} circ cdots circ f_i^{-1} ight) cdot t),问题就转化为求:

    [large min_{j-igeqslant m}d(s_i,t_j) ]

    因为 (d(s,t)=|S oplus T|=|S|+|T|-2|S cap T|),所以就是最大化 (|S cap T|),枚举交集 (I),对于 (j-igeqslant m) 的限制,就是求得最小的 (i),使得 (I subseteq S_i),最大的 (j),使得 (I subseteq T_j)。这里是子集的最大最小值,用莫比乌斯变换预处理即可。

    链接

    [HAOI2015] 按位或

    (min-max) 容斥,转为求 (E(min(S)))(min(S)) 为集合 (S) 中出现第一个元素的时间,得:

    [largeegin{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} ]

    即求形如 (sumlimits_{i=1}^infty ip^i) 的式子,应用扰动法得:

    [largeegin{aligned} &sum_{i=1}^infty ip^i\ =&sum_{i=0}^infty (i+1)p^{i+1}\ =&psum_{i=1}^infty ip^i+sum_{i=0}^infty p^{i+1}\ end{aligned} ]

    (sumlimits_{i=1}^infty ip^i=frac{p}{(1-p)^2}),代入得:

    [large E(min(S))=frac{1}{1-sumlimits_{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 = egin{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}) 恰好满足要求,得:

    [largeegin{aligned} &sum_{i=1}^ninom{n}{i}f(i)\ =&sum_{i=1}^ninom{n}{i}(-1)^{i-1}\ =&-left(sum_{i=0}^ninom{n}{i}(-1)^i-inom{n}{0}(-1)^0 ight)\ =&1 end{aligned} ]

    (g_S=sumlimits_{T subseteq S}(-1)^{|T|-1}a_T),将乘法定义为子集卷积,得:

    [largeegin{aligned} f&=fg+1\ f&=frac{1}{1-g} end{aligned} ]

    求逆即可。

    链接

    集合划分计数

    定义乘法为子集卷积,所求即为:

    [large g=explimits_{leqslant k}f=sum_{i=0}^kfrac{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^{leftlfloorfrac{n}{3} ight floor}))

    链接

    [AGC034F] RNG and XOR

    正难则反,设初始状态为 (i),目标状态为 (0),期望次数为 (E_i),其中 (E_0=0)(p_i=frac{a_i}{sumlimits_j a_j}),得:

    [large E_i=1+sum_{j=0}^{2^n-1}p_jE_{i oplus j}quad left( n eq 0 ight) ]

    发现其为集合对称差卷积,构造集合幂级数,设:

    [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) 得:

    [largeegin{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 ight]hat E(x)(1-[x^varnothing]hat P(x))&=2^n+c\ left[x^varnothing ight]hat E(x)left(1-sum_{i=0}^{2^n-1}p_i ight)&=2^n+c\ end{aligned} ]

    等号左边的项为 (0),得 (c=-2^n),代入后提取第 (x^S left( S eq varnothing ight)) 项系数得:

    [largeegin{aligned} hat E(x)left(hat P(x)-I ight)&=2^n(I-x^{varnothing})\ left[x^S ight]hat E(x)left(left[x^S ight]hat P(x)-1 ight)&=2^n\ end{aligned} ]

    不难发现 (left[x^S ight]hat P(x) eq 1),得:

    [large left[x^S ight]hat E(x)=frac{2^n}{left[x^S ight]hat P(x)-1} ]

    (IFWT) 后提取第 (x^varnothing) 项系数得,:

    [large sum_{i=0}^{2^n-1}left[x^i ight]hat E(x)=2^nE_0=0 ]

    然后就能解出 (left[x^varnothing ight]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_{Tsubseteq 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}^nhat 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 ext{xor} a_i,c_i ext{xor} a_i }),最后统计答案时,将幂级数对应的下标异或上 ( ext{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 ext{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 ight)^2 ]

    也就是集合中所有子集的和的平方,考虑两个元素 (i,j) 的贡献,不难得:

    [largeegin{aligned} &sum_{T subseteq S}left( sum_{i in T} a_i ight)^2\ =&2^{|S|-2}sum_{i in S}sum_{j in S and i eq 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 eq 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 ight)^2+2^{|S|-2}sum_{i in S} a_i^2\ end{aligned} ]

    莫比乌斯变换处理出 (|S|,sum_limits{i in S} a_i,sumlimits_{i in S} a_i^2) 后即可计算,然后再莫比乌斯反演就为答案。

    链接

    [ZJOI2019] 开关

    ([AGC034F] RNG and XOR) 一样,设集合幂级数 (E(x),P(x)),由那题得 (left[x^S ight]hat E(x)=frac{2^n}{left[x^S ight]hat P(x)-1}),根据本题的性质进一步推导:

    [largeegin{aligned} &left[x^S ight]hat E(x)\ =&frac{2^n}{left[x^S ight]hat P(x)-1}\ =&frac{2^n}{sumlimits_{i=1}^n(-1)^{|S cap { i}|}p_i-1}\ =&frac{-2^n}{2sumlimits_{iin S}p_i}\ end{aligned} ]

    得答案为:

    [largeegin{aligned} &frac{1}{2^n}sum_T(-1)^{|S cap T|}left[x^T ight]hat E(x)\ =&frac{1}{2^n}left(sum_{T eq varnothing}(-1)^{|S cap T|}left[x^T ight]hat E(x)+left[x^varnothing ight]hat E(x) ight)\ =&frac{1}{2^n}left(sum_{T eq varnothing}(-1)^{|S cap T|}frac{-2^n}{2sumlimits_{iin T}p_i}+sum_{T eq varnothing}frac{2^n}{2sumlimits_{iin T}p_i} ight)\ =&sum_{T eq varnothing}frac{(-1)^{|S cap T|+1}+1}{2sumlimits_{iin T}p_i}\ =&sum_Tfrac{left[ |S cap T| equiv 1 pmod{2} ight]}{sumlimits_{iin T}p_i}\ end{aligned} ]

    发现 (sumlimits_{i=1}^n p_i) 很小,对其做背包计数即可计算答案,背包过程需记录 (|S cap T|) 的奇偶性。

    链接

    [PKUWC2018] 随机游走

    (min-max) 容斥,转为求 (E(min(S))),即从根到点集 (S) 中第一个点的期望步数。

    枚举当前考虑的点集 (S),设 (f_x)(x) 到点集 (S) 中第一个点的期望步数,(d_x)(x) 的度数,若 (xin 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 ]

    得:

    [largeegin{aligned} f_x&=1+frac{1}{d_x}sum_{i=1}^{d_x} f_{y_i}\ &=1+frac{1}{d_x}left( sum_{yin son}k_yf_x+b_y+f_{fa} ight)\ &=frac{frac{1}{d_x}f_{fa}+frac{1}{d_x}sumlimits_{yin son}b_y+1}{1-frac{1}{d_x}sumlimits_{yin son}k_y} \ end{aligned} ]

    计算出每个点集的期望步数后,用莫比乌斯反演求子集和即可快速回答询问。

    链接

    [SNOI2017] 遗失的答案

    (n,l,x) 都除以 (g),问题转化为在 (left[1,n ight]) 中选数,必须选 (x),求选出的数 (gcd)(1)( ext{lcm})(l) 的方案数。

    发现 (l) 最多有 (8) 个质因子,考虑状压。(left[1,n ight]) 中每个数对应的状态为: 该数中 (l) 的每个质因子的指数是否为 (0),每个质因子的指数是否和 (l) 一样。选一个数就是状态按位或。

    发现很多数状态一样,放到一起来考虑,并且只需考虑 (l) 的约数,发现有用的状态种数为 (600) 左右。维护前缀的 (DP) 值和后缀的 (DP) 值,就能计算强制选一个数方案数了,前缀后缀合并时为集合并卷积。

    链接

  • 相关阅读:
    [luogu] P1440 求m区间内的最小值
    [NOI2014]起床困难综合症
    [SDOI2009]地图复原
    [USACO08JAN] Cow Contest
    【洛谷P5049】旅行(数据加强版)
    【NOIP2015】真题回顾
    【NOIP2014】真题回顾
    【UVA11987】Almost Union-Find
    【UVA11988】破损的键盘
    【UVA11134】传说中的车
  • 原文地址:https://www.cnblogs.com/lhm-/p/14287558.html
Copyright © 2011-2022 走看看