关于容斥原理

Captain_Paul

2018-09-29 11:38:45

Personal

对容斥的理解一直不是很透彻,略写一点,稍作整理 注:本文有部分引自[没想好叫什么名字大佬的博客](https://blog.csdn.net/m0_37286282/article/details/78869512) ------------ ### **最简单的容斥** 求几个集合的并集,如: $|A∩B∩C|=|A|+|B|+|C|-|A∩B|-|A∩C|-|B∩C|+|A∩B∩C|$ 用维恩图也可以轻松得出 由三个集合的并集大小可以推广到$n$个集合的并集大小 即:各集合之和-两个集合的交集+三个集合的交集…… 同理,也可以用这种方法求解概率的问题 如:事件集合$A_i(i∈[1,n])$,求发生其中某些事件(至少发生一个事件)的概率 ------------ ### **关于证明**: [贴个链接](https://blog.csdn.net/m0_37286282/article/details/78869512) ------------ ### **实际问题中的应用** - **简单排列问题**:用$0$到$9$的数字组成不重复的排列,要求第一个数大于$1$,最后一个数小于$8$,有多少种排列方式 正难则反,我们可以求出第一个数小于等于$1$,最后一个数大于等于$8$的排列数 设第一个数小于等于$1$时的集合为$X$,最后一个数大于等于$8$的集合为$Y$ 根据容斥原理得,所求为$|X|+|Y|-|X∩Y|$ 用简单的排列组合可以得到答案为$S=2\times9!+2\times9!-2\times2\times8!$ 那么原题答案$Ans=10!-S$ ------------ - **$0,1,2$序列问题**:长度为$n$的由$0,1,2$组成的序列,要求每个数字至少出现$1$次,有多少种排列方式 还是逆向思维,考虑不出现某些数字的情况 设$A_i$表示不出现数字$i$的序列数,根据容斥原理,得到逆问题的结果为: $|A_0|+|A_1|+|A_2|-|A_0∩A_1|-|A_0∩A_2|-|A_1∩A_2|+|A_0∩A_1∩A_2|$ 可以发现每个$A_i$的值都是$2^n$(因为只有两个数) $A_i$两两相交的值都是$1$(只有一个数) 所以原题答案为$3^n-3\times2^n+3\times1-0$ ------------ - **方程整数解问题**:给出一个方程:$x_1+x_2+...+x_n=t$,其中$0<=x_i<=m$,求方程整数解的数量 先忽略$x_i$的限制,考虑方程非负整数解的数量 问题等价于求方程$(x_1+1)+(x_2+1)+...(x_n+1)=t+n$的正整数解 相当于有$t+n$个$1$,要在其中放$(n-1)$块隔板,因此有$C_{t+n-1}^{n-1}$中放法 所以原方程的非负整数解有$C_{t+n-1}^{n-1}$组 用容斥原理来讨论它的逆问题,即当$x>m$时的解 定义$A_k$为$x_k>m$且其他$x_i>=0$时的集合 沿用隔板的思想,有$m+1$个位置已经被占用了,所以$|A_k|=C_{t+n-m-2}^{n-1}$ 计算这样两个集合$A_k$和$A_p$的交集 $|A_k∩A_p|=C_{t+n-2m-3}^{n-1}$ 考虑到总和为$t$,这样的集合个数是有限制的,设最多有$k$个 逆问题答案$Res=C_{n}^{1}*C_{t+n-m-2}^{n-1}-C_{n}^{2}*C_{t+n-2m-3}^{n-1}+...C_{n}^{k}*C_{t+n-km-k-1}^{n-1}$ 原问题答案即为$Ans=C_{t+n-1}^{n-1}-Res$ [这道题里有用到](https://loj.ac/problem/6077) ------------ - **求区间$[1,r]$内与$n$互质的数的个数** 先计算不与$n$互质的数的个数 考虑$n$的所有质因子$p_i(i∈[1,k])$ 在$[1,r]$内能被$p_i$整除的数的个数为:$\lfloor{r/p_i}\rfloor$ 但是如果直接相加,就会出现重复计算的情况(一个数可能被多个质因子整除) 可以用$2^k$的算法求出所有的质因子组合,计算每种组合的$p_i$乘积,通过容斥原理处理结果 [题在这](http://acm.hdu.edu.cn/showproblem.php?pid=4135) [具体实现代码](https://www.luogu.org/paste/m2s90fs6) ------------