Min-Max 容斥

Min-Max 容斥

一种关于 \(\min,\max\) 的容斥。

公式:

\[\begin{aligned} \max(S)=\sum_{T\subseteq S ,T\neq \varnothing}(-1)^{|T|+1}\min(S) &&(1) \end{aligned} \]

\(\min(S),\max(S)\) 分别表示 \(S\) 中的最大值和最小值。

证明:考虑枚举每个元素作为最小中的贡献(如果有多个值相同的数再再按下标比较)

那么小于当前元素的数不能选。假设有 \(k\) 个大于当前元素的数,则有式子:

\[\sum_{i=0}^{k}\binom{k}{i}(-1)^i=(-1+1)^k=0^k \]

也就是说只有最大值才会有 \(1\) 的贡献。

这个式子在期望意义下依旧满足,根据期望的线性性那么有:

\[\begin{aligned} E(\max(S))=\sum_{T\subseteq S,T\neq \varnothing}(-1)^{|T|+1}E(\min(T)) &&(2) \end{aligned} \]

扩展式子:

\[\begin{aligned} \operatorname{kthmax}(S)=\sum_{T\subseteq S,|T| \ge k}(-1)^{|T|-k}\binom{|T|-1}{k-1}\min(T) &&(3) \end{aligned} \]

证明类似,还是枚举每个元素作为最小元素所在的贡献。

设当前元素 \(x\) 从大到小排名为 \(p\)\(p<k\) 时贡献为 \(0\)

否则枚举 \(T\) 的大小。

\[\begin{aligned} &\sum_{i=k}^{p}(-1)^{i-k}\binom{p-1}{i-1}\binom{i-1}{k-1} \\ =&\sum_{i=k}^{p}(-1)^{i-k}\binom{p-1}{k-1}\binom{c-k}{i-k} \\ =&\binom{p-1}{k-1}\sum_{i=0}^{p-k}(-1)^i\binom{p-k}{i} \\ =&\binom{p-1}{k-1}0^{p-k} \end{aligned} \]

只有元素 \(x\) 恰好是第 \(k\) 大的时候才会有 \(1\) 的贡献。

P3175 [HAOI2015] 按位或

板子题,使用形式二转化为求集合 \(T\) 至少一个位置 \(1\) 的期望步数。

相当于求的是所有子集和,再套一个 \(\text{FMT}\) 板子即可。

P4707 重返现世

题目求得是第 \(k\) 小元素出现的期望时间,等价于求第 \(n+1-k\) 大元素出现的期望时间。接下所有的 \(k\) 都是转化后的。

使用形式三转化为求集合 \(T\) 中出现第一个元素的期望时间,根据期望的线性性,转步数为: \(\displaystyle\sum_{w\in T}\dfrac{m}{p_w}\),那么有:

\[E(kthmax(S))=\sum_{T\subseteq S}\binom{|T|-1}{k-1}(-1)^{|T|-k}\sum_{w\in T}\dfrac{m}{p_w} \]

自然想到一个一个加物品。这种容斥式子的一个经典优化方式是直接将一部分记录为权值,把不好转移的放下标上。

\(f_{i,j,k}\) 表示前 \(i\) 个数中选的所有数的 \(p_w=j\),第 \(k\) 大值的 \(\binom{|T|-1}{k-1}(-1)^{|T|-k}\) 的和是多少。

如果不选当前的数有转移 \(f_{i,j,k}=f_{i-1,j,k}\)

否则选的话,会出现新的系数,比较难处理,考虑:

\[\begin{aligned} &\binom{|T|-1}{k-1}(-1)^{|T|-k} \\ =&\left(\binom{|T|-2}{k-1}+\binom{|T|-2}{k-2}\right)(-1)^{|T|-k} \\ =&-\binom{(|T|-1)-1}{k-1}(-1)^{(|T|-1)-k}+\binom{(|T|-1)-1}{(k-1)-1}(-1)^{(|T|-1)-(k-1)} \end{aligned} \]

你会发现前面一坨的系数等于 \(f_{i-1,j-p_i,k}\) 记录的,后面一坨的系数等于 \(f_{i-1,j-p_i,k-1}\) 的,那么有:

\[f_{i,j,k}=f_{i-1,j,k}-f_{i-1,j-p_i,k}+f_{i-1,j-p_i,k-1} \]

滚动数组优化即可。

[AGC038E] Gachapon

感觉这题出得非常好啊!改变了对 \(\min,\max\) 的刻板影响。

重新定义 \(\min(S)\) 表示集合中第一个满足出现次数 \(c_i \ge b_i\) 的时间,\(\max(S)\) 表示最后一个,设 \(suma\)\(a\) 的总和。

那么依旧可以套用形式二将本题转化为求第集合 \(T\) 中第一个满足条件的期望时间。

首先排除掉集合外元素的干扰,即期望下每 \(suma\displaystyle\sum_{w\in T}\dfrac{1}{a_w}\) 次才会选到一个集合内的元素。

然后注意到从集合内元素出现次数从 \({0,0,\cdots 0}\) 到恰好有一个数满足 \(c_i=b_i\) 的过程中一共经过了 \(\displaystyle\sum_{w\in T}c_w\) 个状态(最终状态不算),那在中间的每个状态做一的贡献。那么也就转化为对于每个 \(\forall i\in T,c_i<b_i\) 的状态,经过这里的概率。

期望转计数,那么对于一个固定状态 \(c\),概率为:

\[\dfrac{(\sum c_i)!}{\prod c_i!}\prod(\dfrac{a_i}{\displaystyle\sum_{x\in T}a_x})^{c_i} \]

第一项为多重排列数,第二项表示生成 \(c_i\)\(i\) 的概率。

再把反演公式带入:

\[\begin{aligned} ans&=\sum_{T\subseteq S}(-1)^{|T|+1}suma\displaystyle\sum_{w\in T}\dfrac{1}{a_w}\times \dfrac{(\sum c_i)!}{\prod c_i!}\prod(\dfrac{a_i}{\displaystyle\sum_{x\in T}a_x})^{c_i} \\ &=suma\sum_{T\subseteq S}(-1)^{|T|+1}\displaystyle\sum_{w\in T}\dfrac{1}{a_w}\times\dfrac{(\sum c_i)!}{\prod c_i!}\prod{a_i}^{c_i}\prod(\dfrac{1}{\displaystyle\sum_{x\in T}a_x})^{\sum c_i} \end{aligned} \]

跟上面类似,将一些更多的系数记录在权值上。

\(f_{i,j,k}\) 表示前 \(i\) 个数选了若干个数使得 \(\sum a_i=j\)\(\sum c_i=k\)\((-1)^{|T|-1}\prod \dfrac{a_i^{c_i}}{c_i!}\) 的系数和。

转移依旧分两种,不选的话 \(f_{i,j,k}=f_{i-1,j,k}\)

选的话 \(f_{i,j,k}=-f_{i-1,j-a_i,k-c_i}\times \prod\dfrac{a_i^{c_i}}{c_i!}\)

复杂度看起来是 \(O(n^4)\) 的,(默认 \(\sum a_i,\sum b_i,n\) 同阶),状态三维转移需要枚举 \(c_i\)

但是仔细一想 \(c_i\) 的一共的枚举量是 \(\sum b_i\) 的,摊下来就是 \(O(n^3)\) 的!

P5643 [PKUWC2018] 随机游走

依旧可以适用形式二将转化为走到集合第一次走到 \(T\) 任意一个元素的期望时间。

让出发点为树的根节点,设 \(f_i\) 表示从 \(i\) 节点出发走到 \(T\) 的期望步数。

\(d_i\) 表示 \(i\) 的度数,那么有:

\[f_i=\dfrac{1}{d_i}(f_{fa}+\sum_{j\in son_i}f_j)+1 \]

显然 \(i\in T\) 的步数为 \(0\)

那么可以直接高斯消元得到 \(f\) 的真实值,但是复杂度略有些爆,可能需要卡常。

注意到这题其实性质非常好,如果 \(f\) 的值只和儿子有关的话那么就可以递推了。唯一的问题就是 \(fa\) 的贡献,那么考虑设 \(f_i\)\(k_if_{fa}+b_i\) 表示。

那么有:

\[\begin{aligned} f_i&=\dfrac{1}{d_i}(f_{fa}+\sum_{j\in son_i}(k_jf_i+b_j))+1 \\ d_if_i&=f_fa+f_i\sum_{j\in son_i}k_j+\sum_{j\in son_i}b_j \\ (d_i-\sum k_j)f_i&=f_{fa}+\sum b_j+d_i \\ f_i&=\dfrac{1}{d_i-\sum k_j}f_{fa}+\dfrac{d_i+\sum b_j}{d_i-\sum k_j} \\ k_i&=\dfrac{1}{d_i-\sum k_j},b_i=\dfrac{d_i+\sum b_j}{d-\sum k_j} \end{aligned} \]

现在转移就跟父亲节点无关了,一遍 \(\text{DFS}\) 即可求出所有值。

现在我们对于每个集合 \(T\) 都可以 \(O(n)\) 求出 \(f_{rt}\) 的值。

注意到:

\[E(\max(S))=\sum_{T\in S}(-1)^{|T|+1}E(\min(T)) \]

我们处理出 \((-1)^{|T|+1}E(\min(T))\) 即可。

再套上高维前缀和即可。

P3600 随机数生成器

还是更改 \(\min,\max\) 的定义。

\(\min(S)\) 表示每次询问的答案的最小值,\(\max(S)\) 表示最大值。

套用形式二:

\[\max(S)=\sum_{T\subseteq S}(-1)^{|T|+1}\min(T) \]

集合 \(T\) 的答案显然只和所包含的本质不同的位置个数(区间并)有关。

\(f_{i,j}\) 表示 \(i\) 个数中最小值为 \(j\) 的概率,\(sf_{i,j}\) 表示前 \(i\) 个数中最小值大于等于 \(j\) 的概率,\(F_i\) 表示区间并大小为 \(i\) 的期望。

\[\begin{aligned} f_{i,j}&=\dfrac{1}{n}\left((x-j+1)f_{i-1,j}+sf_{i-1,j+1}\right) \\ F_{i}&=\sum_{j=1}^{n}f_{i,j}\times j \end{aligned} \]

首先如果一个区间包含另一个区间是没有任何作用的。(如果一个大的区间被选择了,那么小区间选和不选分别带来 \(1\)\(-1\) 的代价,抵消了)。那把所有包含另一个区间的区间给消除掉。再按照右端点排序。

直接记录区间并略有些麻烦,考虑记补集大小,再设 \(g_{i,j,0/1}\) 表示前 \(i\) 个区间选了若干个区间使得区间并的 补集\(j\) 且选了奇数/偶数个区间。

\[\begin{aligned} g_{i,j,w}&=\sum_{r_p<l_i}g_{p,j-(l_i-r_p-1),w\oplus 1}+\sum_{r_p\ge l_i}g_{p,j,w\oplus 1} \end{aligned} \]

注意到 \(l,r\) 分别单调递增,两坨式子分别考虑,第一坨考虑对于每个 \(g_{p,j,w}\)\(r_p<l_i\) 的时候再加入贡献,贡献到 \(c_{j+r_p,w}\),第二托式子考虑对于每个 \(g_{p,j,w}\) 在算出的时候就贡献到 \(d_{j,w}\),在 \(r_p<l_i\) 的时候取消贡献即可。

那么有:

\[g_{i,j,w}=c_{j-(l_i-1),w\oplus 1}+d_{j,w\oplus1} \]

最后再把贡献带入:

\[ans=\sum_{i=1}^{q}\sum_{j=0}^{r_i}(g_{i,j,1}-g_{i,j,0})F(r_i-j) \]

Become Big For Me

一道扩展 \(\min-\max\) 容斥题,真的很牛牛。

\(V_p(n)\) 表示最大的 \(k\),满足 \(p^k\mid n\)

对于所有质因子 \(p\),设 \(v_p(a_i)\) 中的最小值和次小值(不要求严格)为 \(x_p,y_p\),那么答案为 \(\displaystyle\prod_p p^{x_p+y_p}\),注意到操作都是跟 \(\text{lcm}\) 有关,也就是跟 \(v_p(a_i)\) 的最大值有关。套上 \(\min-\max\) 容斥有:

\[\begin{aligned} \gcd_{i\neq j} (A_i\times A_j)&=\prod_{T\subseteq S}\operatorname{lcm}(T)^{(-1)^{|T|-1}}\left(\prod_{T\subseteq S}\operatorname{lcm}(T)^{ (-1)^{|T|-2}(|T|-1)}\right ) \\ &=\prod_{T\subseteq S}\operatorname{lcm}(T)^{(-1)^{|T|}(|T|-2)} \end{aligned} \]

这个其实应该是先对每个因子做 \(\min-\max\) 容斥,然后再相乘。

有一个经典的结论为我们任意一个值域为 \([1,10^6]\) 的集合 \(S\),都存在一个大小为至多为 \(7\) 的子集 \(T\) 使得 \(\gcd(T)=\gcd(S)\)

构造则可以任选一个数,将其最小幂次对应的数加入集合,再检查这个数能否去除即可,证明见 \(CF\) 官方题解。

我们这样选出两组数,使得答案不变,使用的子序列总长度约为 \(O(2^k\times k^2)\),其中 \(2^k\times k\) 为操作次数,其中带一个 \(\dfrac{1}{4}\) 的常数,足以通过。

posted @ 2024-04-26 08:47  Hanghang007  阅读(56)  评论(0编辑  收藏  举报