Min-Max 容斥
Min-Max 容斥
一种关于 \(\min,\max\) 的容斥。
公式:
\(\min(S),\max(S)\) 分别表示 \(S\) 中的最大值和最小值。
证明:考虑枚举每个元素作为最小中的贡献(如果有多个值相同的数再再按下标比较)
那么小于当前元素的数不能选。假设有 \(k\) 个大于当前元素的数,则有式子:
也就是说只有最大值才会有 \(1\) 的贡献。
这个式子在期望意义下依旧满足,根据期望的线性性那么有:
扩展式子:
证明类似,还是枚举每个元素作为最小元素所在的贡献。
设当前元素 \(x\) 从大到小排名为 \(p\) ,\(p<k\) 时贡献为 \(0\)。
否则枚举 \(T\) 的大小。
只有元素 \(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}\),那么有:
自然想到一个一个加物品。这种容斥式子的一个经典优化方式是直接将一部分记录为权值,把不好转移的放下标上。
设 \(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}\)。
否则选的话,会出现新的系数,比较难处理,考虑:
你会发现前面一坨的系数等于 \(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\),概率为:
第一项为多重排列数,第二项表示生成 \(c_i\) 个 \(i\) 的概率。
再把反演公式带入:
跟上面类似,将一些更多的系数记录在权值上。
设 \(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\) 的度数,那么有:
显然 \(i\in T\) 的步数为 \(0\)。
那么可以直接高斯消元得到 \(f\) 的真实值,但是复杂度略有些爆,可能需要卡常。
注意到这题其实性质非常好,如果 \(f\) 的值只和儿子有关的话那么就可以递推了。唯一的问题就是 \(fa\) 的贡献,那么考虑设 \(f_i\) 用 \(k_if_{fa}+b_i\) 表示。
那么有:
现在转移就跟父亲节点无关了,一遍 \(\text{DFS}\) 即可求出所有值。
现在我们对于每个集合 \(T\) 都可以 \(O(n)\) 求出 \(f_{rt}\) 的值。
注意到:
我们处理出 \((-1)^{|T|+1}E(\min(T))\) 即可。
再套上高维前缀和即可。
P3600 随机数生成器
还是更改 \(\min,\max\) 的定义。
\(\min(S)\) 表示每次询问的答案的最小值,\(\max(S)\) 表示最大值。
套用形式二:
集合 \(T\) 的答案显然只和所包含的本质不同的位置个数(区间并)有关。
设 \(f_{i,j}\) 表示 \(i\) 个数中最小值为 \(j\) 的概率,\(sf_{i,j}\) 表示前 \(i\) 个数中最小值大于等于 \(j\) 的概率,\(F_i\) 表示区间并大小为 \(i\) 的期望。
首先如果一个区间包含另一个区间是没有任何作用的。(如果一个大的区间被选择了,那么小区间选和不选分别带来 \(1\) 和 \(-1\) 的代价,抵消了)。那把所有包含另一个区间的区间给消除掉。再按照右端点排序。
直接记录区间并略有些麻烦,考虑记补集大小,再设 \(g_{i,j,0/1}\) 表示前 \(i\) 个区间选了若干个区间使得区间并的 补集 是 \(j\) 且选了奇数/偶数个区间。
注意到 \(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\) 的时候取消贡献即可。
那么有:
最后再把贡献带入:
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\) 容斥有:
这个其实应该是先对每个因子做 \(\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}\) 的常数,足以通过。