集合幂级数杂题

1|0CF582E Boolean Function

四元组 (A,B,C,D) 的情况只有 16 种,将每种情况的函数值进行状压,在表达式建出的二叉树上进行 DP,合并子树为对应的卷积。

链接

2|0CF449D Jzzhu and Numbers

先做集合交卷积的莫比乌斯变换,然后快速幂计算选出非空子集的方案数,然后再莫比乌斯反演回去即可。本质为高维前缀和。

链接

3|0CF1392G Omkar and Pies

设两个串分别为 s,t,每个操作,也就是置换(对换)为 fi,定义置换的左作用 ,得答案为:

kd((frfr1fl+1fl)s,t)

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

d((frfr1fl+1fl)s,t)=d(s,(frfr1fl+1fl)1t)=d(s,(fl1fl+11fr11fr1)t)=d((f11f21fl11)s,(f11f21fr1)t)

si=(f11f21fi1)s,ti=(f11f21fi1)t,问题就转化为求:

minjimd(si,tj)

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

链接

4|0[HAOI2015] 按位或

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

E(min(S))=i=1iP(min(S)=i)=i=1i(ST=pT)i1(1ST=pT)=i=1i(ST=pT)i1i(ST=pT)i

即求形如 i=1ipi 的式子,应用扰动法得:

i=1ipi=i=0(i+1)pi+1=pi=1ipi+i=0pi+1

i=1ipi=p(1p)2,代入得:

E(min(S))=11ST=pT

莫比乌斯变换求子集和即可。

还有一种解法:

p 看作集合幂级数,应用集合并卷积,得期望时间为:

f=i=1i(pipi1)

这个集合幂级数全集的那一项,莫比乌斯变换得:

f^S=i=1i(p^Sip^Si1)

应用刚才的推导不难得:

f^S={1p^S1p^S<10p^S=1

然后再莫比乌斯反演即可。

链接

5|0[NOI Online #3 提高组] 优秀子序列

所求即为选出两两按位与为 0 的集合,求集合权值和为 s 的方案数。

选出两两按位与为 0 的集合其实就是子集卷积,然后 exp 即可求集合权值和为 s 的方案数。

链接

6|0[CEOI2019] Amusement Park

发现对于任何一种 DAG 的方案,将所有边进行翻转后仍为 DAG,设 fS 为集合 S 中的点构成的导出子图为 DAG 的方案数,答案即为 12mfU

aS 表示 S 集合是否为独立集,其取值为 01,用莫比乌斯变换求子集和即可计算 aS。发现直接做会算重,需要容斥:

fS=TS(1)|T|1aTfST

考虑怎么得到的容斥系数,设容斥系数为 f(i),发现 f(i)=(1)i1 恰好满足要求,得:

i=1n(ni)f(i)=i=1n(ni)(1)i1=(i=0n(ni)(1)i(n0)(1)0)=1

gS=TS(1)|T|1aT,将乘法定义为子集卷积,得:

f=fg+1f=11g

求逆即可。

链接

7|0集合划分计数

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

g=expkf=i=0kfii!

直接做是 O(n32n) 的,根据 g=f(gfkk!) 做,就是 O(n22n) 了。

链接

8|0[JOI 2018 Final] 毒蛇越狱

设询问中 0,1,? 的个数分别为 c0,c1,c2。直接的暴力就是枚举 ? 的情况,复杂度为 O(q2c2)。若不存在 1,将 ? 看作 1,计算子集和即可,若有 1,进行容斥,复杂度为 O(q2c1)。若不存在 0,将 ? 看作 0,计算超集和即可,若有 0,进行容斥,复杂度为 O(q2c0)。根据 c0,c1,c2 的大小选择做法,得复杂度为 O(n2n+q2n3)

链接

9|0[AGC034F] RNG and XOR

正难则反,设初始状态为 i,目标状态为 0,期望次数为 Ei,其中 E0=0pi=aijaj,得:

Ei=1+j=02n1pjEij(n0)

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

E(x)=i=02n1Eixi,P(x)=i=02n1pixi,I=i=02n1xi

根据转移有:

E(x)=I+E(x)P(x)+cx

最后一项是为了满足 n=0 时的情况,进行 FWT 得:

E^(x)=2nx+E^(x)P^(x)+cIE^(x)(IP^(x))=2nx+cI[x]E^(x)(1[x]P^(x))=2n+c[x]E^(x)(1i=02n1pi)=2n+c

等号左边的项为 0,得 c=2n,代入后提取第 xS (S) 项系数得:

E^(x)(P^(x)I)=2n(Ix)[xS]E^(x)([xS]P^(x)1)=2n

不难发现 [xS]P^(x)1,得:

[xS]E^(x)=2n[xS]P^(x)1

IFWT 后提取第 x 项系数得,:

i=02n1[xi]E^(x)=2nE0=0

然后就能解出 [x]E^(x) 了,求出 E^(x)IFWT 即可。

链接

10|0CF1119H Triple

由题意得到 n 个集合幂级数,其中 fi 满足 fi,ai=x,fi,bi=y,fi,ci=z。将 n 个幂级数进行异或卷积即可得到答案,但直接卷积复杂度无法接受。

发现每个幂级数都只有三个非零项,对其进行 FWT 得:

f^i,S=T2U(1)|ST|fi,T=(1)|Sai|x+(1)|Sbi|y+(1)|Sci|z

设最后所求的幂级数为 f,得:

f^S=i=1nf^i,S=i=1n(1)|Sai|x+(1)|Sbi|y+(1)|Sci|z

为简化问题,将三元组 {ai,bi,ci} 转化为 {0,bixorai,cixorai},最后统计答案时,将幂级数对应的下标异或上 xori=1nai 即可。这样的话,(1)|Sai|x+(1)|Sbi|y+(1)|Sci|z 就只有四种可能的取值了:

x+y+z,x+yz,xy+z,xyz

求出每种出现次数,快速幂就能求出 f^S 了。设每种出现次数分别为 c1,c2,c3,c4。显然有 c1+c2+c3+c4=n

考虑三个幂级数 g1,g2,g3,其分别满足:

g1,S=i=1n[bi=S],g2,S=i=1n[ci=S],g3,S=i=1n[bixorci=S]

对其进行 FWT,不难发现:

g^1,S=c1+c2c3c4,g^2,S=c1c2+c3c4,g^3,S=c1c2c3+c4

根据方程解出 c1,c2,c3,c4 即可。

链接

11|0CF772D Varying Kibibits

发现 f 这个函数的按位取 min,其实就是十进制下的按位与,那么先做十进制的莫比乌斯变换,计算超集和。考虑如何统计答案,现在要计算的即为:

TS(iTai)2

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

TS(iTai)2=2|S|2iSjSijaiaj+2|S|1iSai2=2|S|2iSjSijaiaj+2|S|2iSai2+2|S|2iSai2=2|S|2(iSai)2+2|S|2iSai2

莫比乌斯变换处理出 |S|,iSai,iSai2 后即可计算,然后再莫比乌斯反演就为答案。

链接

12|0[ZJOI2019] 开关

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

[xS]E^(x)=2n[xS]P^(x)1=2ni=1n(1)|S{i}|pi1=2n2iSpi

得答案为:

12nT(1)|ST|[xT]E^(x)=12n(T(1)|ST|[xT]E^(x)+[x]E^(x))=12n(T(1)|ST|2n2iTpi+T2n2iTpi)=T(1)|ST|+1+12iTpi=T[|ST|1(mod2)]iTpi

发现 i=1npi 很小,对其做背包计数即可计算答案,背包过程需记录 |ST| 的奇偶性。

链接

13|0[PKUWC2018] 随机游走

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

枚举当前考虑的点集 S,设 fxx 到点集 S 中第一个点的期望步数,dxx 的度数,若 xS,则有 fx=0,否则有:

fx=1+1dxi=1dxfyi

直接高斯消元是 O(n3) 的,有一个树上消元的技巧能快速计算,将每个点的 DP 值用其父亲的 DP 值表示,即:

fx=kxffa+bx

得:

fx=1+1dxi=1dxfyi=1+1dx(ysonkyfx+by+ffa)=1dxffa+1dxysonby+111dxysonky

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

链接

14|0[SNOI2017] 遗失的答案

n,l,x 都除以 g,问题转化为在 [1,n] 中选数,必须选 x,求选出的数 gcd1lcml 的方案数。

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

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

链接


__EOF__

本文作者lhm_
本文链接https://www.cnblogs.com/lhm-/p/14287558.html
关于博主:sjzez 的一名 OI 学生
版权声明:转载标明出处
声援博主:希望得到宝贵的建议
posted @   lhm_liu  阅读(512)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示