四元组 (A,B,C,D) 的情况只有 16 种,将每种情况的函数值进行状压,在表达式建出的二叉树上进行 DP,合并子树为对应的卷积。
链接
先做集合交卷积的莫比乌斯变换,然后快速幂计算选出非空子集的方案数,然后再莫比乌斯反演回去即可。本质为高维前缀和。
链接
设两个串分别为 s,t,每个操作,也就是置换(对换)为 fi,定义置换的左作用 ⋅,得答案为:
k−d((fr∘fr−1∘⋯∘fl+1∘fl)⋅s,t)
其中 d(s,t) 表示 s,t 的汉明距离,即为对应位不同字符个数,进一步得:
d((fr∘fr−1∘⋯∘fl+1∘fl)⋅s,t)=d(s,(fr∘fr−1∘⋯∘fl+1∘fl)−1⋅t)=d(s,(f−1l∘f−1l+1∘⋯∘f−1r−1∘f−1r)⋅t)=d((f−11∘f−12∘⋯∘f−1l−1)⋅s,(f−11∘f−12∘⋯∘f−1r)⋅t)
设 si=(f−11∘f−12∘⋯∘f−1i)⋅s,ti=(f−11∘f−12∘⋯∘f−1i)⋅t,问题就转化为求:
minj−i⩾md(si,tj)
因为 d(s,t)=|S⊕T|=|S|+|T|−2|S∩T|,所以就是最大化 |S∩T|,枚举交集 I,对于 j−i⩾m 的限制,就是求得最小的 i,使得 I⊆Si,最大的 j,使得 I⊆Tj。这里是子集的最大最小值,用莫比乌斯变换预处理即可。
链接
先 min−max 容斥,转为求 E(min(S)),min(S) 为集合 S 中出现第一个元素的时间,得:
E(min(S))=∞∑i=1iP(min(S)=i)=∞∑i=1i(∑S∩T=∅pT)i−1(1−∑S∩T=∅pT)=∞∑i=1i(∑S∩T=∅pT)i−1−i(∑S∩T=∅pT)i
即求形如 ∞∑i=1ipi 的式子,应用扰动法得:
∞∑i=1ipi=∞∑i=0(i+1)pi+1=p∞∑i=1ipi+∞∑i=0pi+1
得 ∞∑i=1ipi=p(1−p)2,代入得:
E(min(S))=11−∑S∩T=∅pT
莫比乌斯变换求子集和即可。
还有一种解法:
将 p 看作集合幂级数,应用集合并卷积,得期望时间为:
f=∞∑i=1i(pi−pi−1)
这个集合幂级数全集的那一项,莫比乌斯变换得:
^fS=∞∑i=1i(^piS−^pi−1S)
应用刚才的推导不难得:
^fS={1^pS−1^pS<10^pS=1
然后再莫比乌斯反演即可。
链接
所求即为选出两两按位与为 0 的集合,求集合权值和为 s 的方案数。
选出两两按位与为 0 的集合其实就是子集卷积,然后 exp 即可求集合权值和为 s 的方案数。
链接
发现对于任何一种 DAG 的方案,将所有边进行翻转后仍为 DAG,设 fS 为集合 S 中的点构成的导出子图为 DAG 的方案数,答案即为 12mfU。
设 aS 表示 S 集合是否为独立集,其取值为 0 或 1,用莫比乌斯变换求子集和即可计算 aS。发现直接做会算重,需要容斥:
fS=∑T⊆S(−1)|T|−1aTfS−T
考虑怎么得到的容斥系数,设容斥系数为 f(i),发现 f(i)=(−1)i−1 恰好满足要求,得:
n∑i=1(ni)f(i)=n∑i=1(ni)(−1)i−1=−(n∑i=0(ni)(−1)i−(n0)(−1)0)=1
设 gS=∑T⊆S(−1)|T|−1aT,将乘法定义为子集卷积,得:
f=fg+1f=11−g
求逆即可。
链接
定义乘法为子集卷积,所求即为:
g=exp⩽kf=k∑i=0fii!
直接做是 O(n32n) 的,根据 g′=f′(g−fkk!) 做,就是 O(n22n) 了。
链接
设询问中 0,1,? 的个数分别为 c0,c1,c2。直接的暴力就是枚举 ? 的情况,复杂度为 O(q2c2)。若不存在 1,将 ? 看作 1,计算子集和即可,若有 1,进行容斥,复杂度为 O(q2c1)。若不存在 0,将 ? 看作 0,计算超集和即可,若有 0,进行容斥,复杂度为 O(q2c0)。根据 c0,c1,c2 的大小选择做法,得复杂度为 O(n2n+q2⌊n3⌋)。
链接
正难则反,设初始状态为 i,目标状态为 0,期望次数为 Ei,其中 E0=0,pi=ai∑jaj,得:
Ei=1+2n−1∑j=0pjEi⊕j(n≠0)
发现其为集合对称差卷积,构造集合幂级数,设:
E(x)=2n−1∑i=0Eixi,P(x)=2n−1∑i=0pixi,I=2n−1∑i=0xi
根据转移有:
E(x)=I+E(x)P(x)+cx∅
最后一项是为了满足 n=0 时的情况,进行 FWT 得:
^E(x)=2nx∅+^E(x)^P(x)+cI^E(x)(I−^P(x))=2nx∅+cI[x∅]^E(x)(1−[x∅]^P(x))=2n+c[x∅]^E(x)(1−2n−1∑i=0pi)=2n+c
等号左边的项为 0,得 c=−2n,代入后提取第 xS (S≠∅) 项系数得:
^E(x)(^P(x)−I)=2n(I−x∅)[xS]^E(x)([xS]^P(x)−1)=2n
不难发现 [xS]^P(x)≠1,得:
[xS]^E(x)=2n[xS]^P(x)−1
IFWT 后提取第 x∅ 项系数得,:
2n−1∑i=0[xi]^E(x)=2nE0=0
然后就能解出 [x∅]^E(x) 了,求出 ^E(x) 后 IFWT 即可。
链接
由题意得到 n 个集合幂级数,其中 fi 满足 fi,ai=x,fi,bi=y,fi,ci=z。将 n 个幂级数进行异或卷积即可得到答案,但直接卷积复杂度无法接受。
发现每个幂级数都只有三个非零项,对其进行 FWT 得:
^fi,S=∑T⊆2U(−1)|S∩T|fi,T=(−1)|S∩ai|x+(−1)|S∩bi|y+(−1)|S∩ci|z
设最后所求的幂级数为 f,得:
^fS=n∏i=1^fi,S=n∏i=1(−1)|S∩ai|x+(−1)|S∩bi|y+(−1)|S∩ci|z
为简化问题,将三元组 {ai,bi,ci} 转化为 {0,bixorai,cixorai},最后统计答案时,将幂级数对应的下标异或上 xorni=1ai 即可。这样的话,(−1)|S∩ai|x+(−1)|S∩bi|y+(−1)|S∩ci|z 就只有四种可能的取值了:
x+y+z,x+y−z,x−y+z,x−y−z
求出每种出现次数,快速幂就能求出 ^fS 了。设每种出现次数分别为 c1,c2,c3,c4。显然有 c1+c2+c3+c4=n。
考虑三个幂级数 g1,g2,g3,其分别满足:
g1,S=n∑i=1[bi=S],g2,S=n∑i=1[ci=S],g3,S=n∑i=1[bixorci=S]
对其进行 FWT,不难发现:
^g1,S=c1+c2−c3−c4,^g2,S=c1−c2+c3−c4,^g3,S=c1−c2−c3+c4
根据方程解出 c1,c2,c3,c4 即可。
链接
发现 f 这个函数的按位取 min,其实就是十进制下的按位与,那么先做十进制的莫比乌斯变换,计算超集和。考虑如何统计答案,现在要计算的即为:
∑T⊆S(∑i∈Tai)2
也就是集合中所有子集的和的平方,考虑两个元素 i,j 的贡献,不难得:
∑T⊆S(∑i∈Tai)2=2|S|−2∑i∈S∑j∈S∧i≠jaiaj+2|S|−1∑i∈Sa2i=2|S|−2∑i∈S∑j∈S∧i≠jaiaj+2|S|−2∑i∈Sa2i+2|S|−2∑i∈Sa2i=2|S|−2(∑i∈Sai)2+2|S|−2∑i∈Sa2i
莫比乌斯变换处理出 |S|,∑i∈Sai,∑i∈Sa2i 后即可计算,然后再莫比乌斯反演就为答案。
链接
和 [AGC034F]RNG and XOR 一样,设集合幂级数 E(x),P(x),由那题得 [xS]^E(x)=2n[xS]^P(x)−1,根据本题的性质进一步推导:
[xS]^E(x)=2n[xS]^P(x)−1=2nn∑i=1(−1)|S∩{i}|pi−1=−2n2∑i∈Spi
得答案为:
12n∑T(−1)|S∩T|[xT]^E(x)=12n⎛⎝∑T≠∅(−1)|S∩T|[xT]^E(x)+[x∅]^E(x)⎞⎠=12n⎛⎜⎝∑T≠∅(−1)|S∩T|−2n2∑i∈Tpi+∑T≠∅2n2∑i∈Tpi⎞⎟⎠=∑T≠∅(−1)|S∩T|+1+12∑i∈Tpi=∑T[|S∩T|≡1(mod2)]∑i∈Tpi
发现 n∑i=1pi 很小,对其做背包计数即可计算答案,背包过程需记录 |S∩T| 的奇偶性。
链接
先 min−max 容斥,转为求 E(min(S)),即从根到点集 S 中第一个点的期望步数。
枚举当前考虑的点集 S,设 fx 为 x 到点集 S 中第一个点的期望步数,dx 为 x 的度数,若 x∈S,则有 fx=0,否则有:
fx=1+1dxdx∑i=1fyi
直接高斯消元是 O(n3) 的,有一个树上消元的技巧能快速计算,将每个点的 DP 值用其父亲的 DP 值表示,即:
fx=kxffa+bx
得:
fx=1+1dxdx∑i=1fyi=1+1dx(∑y∈sonkyfx+by+ffa)=1dxffa+1dx∑y∈sonby+11−1dx∑y∈sonky
计算出每个点集的期望步数后,用莫比乌斯反演求子集和即可快速回答询问。
链接
将 n,l,x 都除以 g,问题转化为在 [1,n] 中选数,必须选 x,求选出的数 gcd 为 1,lcm 为 l 的方案数。
发现 l 最多有 8 个质因子,考虑状压。[1,n] 中每个数对应的状态为: 该数中 l 的每个质因子的指数是否为 0,每个质因子的指数是否和 l 一样。选一个数就是状态按位或。
发现很多数状态一样,放到一起来考虑,并且只需考虑 l 的约数,发现有用的状态种数为 600 左右。维护前缀的 DP 值和后缀的 DP 值,就能计算强制选一个数方案数了,前缀后缀合并时为集合并卷积。
链接
__EOF__
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现