专栏文章

min-max容斥

个人记录参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@miqcxpkl
此快照首次捕获于
2025/12/04 02:45
3 个月前
此快照最后确认于
2025/12/04 02:45
3 个月前
查看原文
min_max容斥无疑为 min\minmax\max 搭建了一座桥梁。
max(S)=TS(1)T+1min(T)\max(S)=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\min(T)
证明:对于 SS 中元素 xx,若其是第 kk 大,则其被算了
sz=0k1(1)sz(k1sz)\sum\limits_{sz=0}^{k-1}(-1)^{sz} \dbinom{k-1}{sz}
这里的 szsz 指的是除了元素 xx 以外,集合 TT 内其他的元素个数
而它又等于 (11)k1=[k1=0]=[k=1](1-1)^{k-1}=[k-1=0]=[k=1]
也就是说除了最大的算一次,其他的都只算了 00
有如下推论。
lcm(S)=TSgcd(T)(1)T1\operatorname{lcm}(S)=\prod\limits_{T\subseteq S} \gcd(T)^{(-1)^{|T|-1}}
首先列出通项
lcm(La1,La2,,Lak)=S2kgcd(LS)(1)S+1=S2kLgcd(S)(1)S+1lcm(L_{a_1},L_{a_2},\cdots,L_{a_k})=\prod_{S\subseteq2^k} \gcd(L_S)^{(-1)^{|S|+1}}=\prod_{S\subseteq2^k} L_{\gcd(S)}^{(-1)^{|S|+1}}
那么 LdL_d 头顶上的指数应该是 gcd(S)=d(1)S+1\sum\limits_{\gcd(S)=d}(-1)^{|S|+1},记其为 f(d)f(d)
然后看到 gcd(S)=d\gcd(S)=d 的条件应当立即想到做如下变换
g(d)=dgcd(S)(1)S+1g(d)=\sum\limits_{d|gcd(S)}(-1)^{|S|+1}
这样变换的好处是把一个和 SS 里数字运算得出的值有关的量,变成了只和数字本身有关的量。
则有 f(d)=dnμ(nd)g(n)f(d)=\sum\limits_{d|n} \mu(\frac{n}{d})g(n)
考察 g(d)g(d),如果有 xx 个数字被 dd 整除,那么 g(d)=i=1x(1)x+1(xi)g(d)=\sum\limits_{i=1}^x(-1)^{x+1}\dbinom{x}{i}
最后得到 g(x)={1x10x=0g(x)=\begin{cases}1&x\geq1\\0&x=0\end{cases}
这样我们的解法就变得很明朗了。
首先 nlognn\log n 把所有数的约数给处理好 (11+12++1nlogn\frac{1}{1}+\frac{1}{2}+\cdots+\frac{1}{n}\leq \log n)
加入 aia_i ,如果之前没有出现过 aia_i,那么在约数表里扫描。把对应的 g(d)g(d) 改成 11。然后再枚举 dd 的约数,修改 ff,修改 ff 时对应修改 ansans
总结与启发:在高维取 min\min 和取 max\max 要可以从反方向想,使用 minmaxmin_max 定理。碰到 gcd(S)\gcd(S) 要记得使用反演变成 dgcd(S)d|\gcd(S) 的形式,这样方便处理。
E(max(S))=TS(1)T+1E(min(T))E(\max(S))=\sum\limits_{T\subseteq S}(-1)^{|T|+1}E(\min(T))
不是很清楚怎么证……可能就是用期望的定义式吧
来看一道题目
给定 nmn*m的棋盘,每个格子上有 00 ~ 99 的数字。每个回合以的概率选中格子 (i,j)(i,j) 并涂成黑色,可能重复涂色。若每行每列都至少有一个黑色格子则游戏结束。求结束的期望时间。
令集合 SS 为所有行和列被第一次覆盖到的时间的集合。那么其子集 TT 则代表了一部分行和列第一次被覆盖到的时间集合。
我们要求的应当是 E(max(S))E(\max(S)),于是发动某武功秘籍。
E(max(S))=TS(1)T+1E(min(T))E(\max(S))=\sum\limits_{T\subseteq S} (-1)^{|T|+1} E(\min(T))
E(min(T))E(\min(T))
E(min(T))=i=1p(i)i=i=1p(stepi)=i=1(1p)i=1p=i=1nj=1mPi,j(i,j)TPi,jE(\min(T))=\sum\limits_{i=1} p(i)*i=\sum\limits_{i=1} p(step\geq i)=\sum\limits_{i=1}(1-p)^i=\frac{1}{p}=\frac{\sum\limits_{i=1}^n\sum\limits_{j=1}^m P_{i,j}}{\sum\limits_{(i,j)∈T}P_{i,j}}
这个 pp 就是选到集合 TT 里格子的概率。
我们发现 (i,j)TPi,j\sum\limits_{(i,j)∈T}P_{i,j} 是个较小的数字。并且它对应增加到答案的系数也只有 ±1±1 两种可能。
由于 nm150nm\leq 150,所以 max(n,m)12\max(n,m)\leq 12,不妨设 nmn\leq m
于是我们枚举行的子集。然后对于列,我们设计状态 fi,sum,coef_{i,sum,coe} 代表前 ii 列,概率总和为 sumsum,最终加到答案里系数为 coecoe 的方案总数。
时间复杂度:2nm9nm=O(2nnm2)2^n*m*9nm=O(2^nnm^2)
还有一道题目 P3175 [HAOI2015] 按位或
对于这种期望题,我们的集合 SS 不需要考虑期望意义,也就是说,只需要注意在一次的时候重要的东西(如怎么判定结束,怎么弄出 min\min/max\max 意义)在于什么即可。
我们令集合 SS 为每一位被赋予 11 的时间集合。
同样有
E(max(S))=TS(1)T+1E(min(T))E(\max(S))=\sum\limits_{T\subseteq S} (-1)^{|T|+1} E(\min(T))
然后就差不多了。
然后介绍一种类似于 ex min-max 的容斥
kthmax(S)=TSf(T1)min(T)kthmax(S)=\sum\limits_{T\subseteq S} f(|T|-1)\min(T)
这里用了 f(T1)f(|T|-1) 是想把要算的第 kk 大的那个数排开来,这样的话,ff 会更方便被表示
而我们该如何计算 f(T1)f(|T|-1) 呢?
面对问题,我们要学会举一反三,方能一通百通
对于第 xx 大的数字,它会被计算 g(x)=i=0x1(x1i)f(i)g(x)=\sum\limits_{i=0}^{x-1} \dbinom{x-1}{i}f(i)
也就有 g(x+1)=i=0x(xi)f(i)g(x+1)=\sum\limits_{i=0}^{x} \dbinom{x}{i}f(i)
而我们希望 g(x)=[x=k]g(x)=[x=k]
h(x)=g(x+1)=[x=k1]h(x)=g(x+1)=[x=k-1]
根据反演公式,我们有 f(x)=i=0x(xi)(1)xih(i)=i=0x(xi)(1)xig(i+1)=(xk1)(1)xk+1f(x)=\sum\limits_{i=0}^{x}\dbinom{x}{i}(-1)^{x-i}h(i)=\sum\limits_{i=0}^{x}\dbinom{x}{i}(-1)^{x-i}g(i+1)=\dbinom{x}{k-1}(-1)^{x-k+1}
那么,我们有 kthmax(S)=TS(T1k1)(1)Tkmin(T)kthmax(S)=\sum\limits_{T\subseteq S} \dbinom{|T|-1}{k-1}(-1)^{|T|-k}\min(T)
这个式子对于期望同样成立!

评论

1 条评论,欢迎与作者交流。

正在加载评论...