\[\color{red}{\textsf{小游者,真神人也,左马桶,右永神,会执利笔破邪炁,何人当之?}} \\
\begin{array}{|}
\hline
\color{pink}{\text{A small swimmer is a God.}} \\
\color{pink}{\text{The left toilet and the right eternal God}} \\
\color{pink}{\text{can break the evil energy with a sharp pen.}} \\
\color{pink}{\text{Who can resist him? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{green}{\text{小遊者は、神であり、左便器、右永神であり}} \\
\color{green}{\text{鋭いペンを持って真実を突き刺している。誰が彼に抵抗できるだろうか? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{lightblue}{\text{Petit voyageur, est Dieu aussi, toilettes gauche, Dieu éternel droit,}} \\
\color{lightblue}{\text{peut tenir un stylo tranchant pour briser le mal, qui devrait le faire?}} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{purple}{\text{Der Direktor ist wirklich ein Gott}} \\
\color{purple}{\text{mit einer Toilette links und Yongshen rechts}} \\
\color{purple}{\text{der einen spitzen Stift hält}} \\
\color{purple}{\text{um die Wahrheit zu durchdringen.}} \\
\color{purple}{\text{Wer kann ihm widerstehen? }} \\
\hline
\end{array} \\
\begin{array}{|}
\hline
\color{cyan}{\text{Ein kleiner Schwimmer ist ein Gott.}} \\
\color{cyan}{\text{Die linke Toilette und der rechte ewige Gott können }} \\
\color{cyan}{\text{die böse Energie mit einem scharfen Stift brechen.}} \\
\color{cyan}{\text{Wer sollte es sein?}} \\
\hline
\end{array} \\
\color{red}{\textsf{对曰:“无人,狗欲当之,还请赐教!”}} \\
\newcommand\brak[1]{\left({#1}\right)}
\newcommand\Brak[1]{\left\{{#1}\right\}}
\newcommand\d[0]{\text{d}}
\newcommand\string[2]{\genfrac{\{}{\}}{0pt}{}{#1}{#2}}
\newcommand\down[2]{{#1}^{\underline{#2}}}
\newcommand\ddiv[2]{\left\lfloor\frac{#1}{#2}\right\rfloor}
\newcommand\udiv[2]{\left\lceil\frac{#1}{#2}\right\rceil}
\newcommand\lcm[0]{\operatorname{lcm}}
\newcommand\set[1]{\left\{{#1}\right\}}
\newcommand\ceil[1]{\left\lceil{#1}\right\rceil}
\newcommand\floor[1]{\left\lfloor{#1}\right\rfloor}
\newcommand\rhs[1]{\;\text{Rhs}\;#1}
\newcommand\lhs[1]{\;\text{Lhs}\;#1}
\newcommand\Vec[1]{\vec{\mathbf{#1}}}
\newcommand\rank[0]{\text{rank}}
\newcommand\group[1]{\left\langle\right\rangle}
\newcommand\norm[1]{\left|{#1}\right|}
\]
部分内容也是 2013 年国家集训队论文《浅谈容斥原理》中的。还有一些来源于《炫酷反演魔术》。另外有一些来源于 \(\sf Quack\) 的课件,最后还有一些杂烂文章就是来源于我自己了......
不一定完结,随机更新。
基本容斥
假设有 \(n\) 个性质 \(P_1,P_2,\cdots,P_n\),在全集 \(U\) 中满足这些性质的元素分别为 \(S_1,S_2,\cdots,S_n\).
最基本的容斥形式如下:
\[\left|\bigcup_{i=1}^n S_i\right|=\sum_i|S_i|-\sum_{i<j}|S_i\cap S_j|+\sum_{i<j<k}|S_i\cap S_j\cap S_k|-\cdots+(-1)^{n-1}|S_1\cap S_2\cap S_3\cdots \cap S_n|
\]
考虑一个属于 \(T_1,T_2\cdots,T_m\) 的元素会被计算多少次:
\[\sum_{i=1}^m (-1)^{i-1}{m\choose i}=-\brak{(1-1)^m-1}=1
\]
然后,我们可以稍加推广,得到另外的一个形式:
\[\norm{\bigcap_{i=1}^n S_i}=\norm U-\norm{\bigcup_{i=1}^n \bar{S_i}}
\]
举个例子:错位排列。
对于性质 \(P_i\),其表示 \(\sigma_i\neq i\),而我们的目标是求 \(\displaystyle \norm{\bigcap_{i=1}^n S_i}\),根据上面的容斥形式,需要用到 \(\bar{S_i}\),其表示满足 \(\sigma_i=i\) 的所有排列,此时我们可以进行容斥了:
\[\begin{aligned}
\norm{\bigcap_{i=1}^n S_i}&=\norm U-\norm{\bigcup_{i=1}^n \bar{S_i}} \\
&=n!-\sum_{t=1}^n(-1)^{t-1}\sum_{i_1<i_2<i_3\cdots<i_t}\norm{\bigcap_{k=1}^t S_{i_k}} \\
&=n!-\sum_{t=1}^n(-1)^{t-1}\sum_{i_1<i_2<i_3\cdots<i_t}(n-t)! \\
&=n!-\sum_{t=1}^n(-1)^{t-1}{n\choose t}(n-t)! \\
&=n!-\sum_{t=1}^n(-1)^{t-1}\frac{n!}{t!} \\
&=n!+\sum_{t=1}^n(-1)^t\frac{n!}{t!} \\
&=n!\sum_{t=0}^n(-1)^t\frac{n!}{t!} \\
\end{aligned}
\]
化简的关键在于我们发现无论取多少个集合的交,交的大小都只和集合个数有关,这也是错排的通项公式是非指数级的关键。
二项式反演
前面的公式,其核心还是最开始那个证明的式子:
\[\sum_{i=1}^m (-1)^{i-1}{m\choose i}=-\brak{(1-1)^m-1}=1
\]
如果你再细心一点,将会发现,同一行的组合数交错和为 \(0\),即:
\[\sum_{i=0}^m (-1)^i{m\choose i}=0
\]
严谨地,实际上
\[\sum_{i=0}^m (-1)^i{m\choose i}=[m=0]
\]
再来看看前面的错排,如果设 \(f(n)\) 表示任意一个排列方案数,\(g(n)\) 表示满足了 \(P\) 中的 \(n\) 个的方案数,那么,我们枚举到底是哪 \(n\) 个错开,就可以由 \(g\) 得到 \(f\):
\[f(n)=\sum_{i=0}^n{n\choose i}g(i)
\]
现在的问题是:\(f(n)=n!\),而 \(g(n)\) 不知道,也就是说,我们想要从 \(f\) 推到 \(g\),但是目前只能由 \(g\) 得到 \(f\).
但是没有关系,推一推式子,设 \(\displaystyle g(n)=\sum_{i=0}^n{n\choose i}\lambda(i)f(i)\),其中 \(\lambda(i)\) 表示容斥系数,那么
\[\begin{aligned}
g(n)&=\sum_{i=0}^n\lambda(i){n\choose i}\sum_{j=0}^i{i\choose j}g(j) \\
&=\sum_{i=0}^n\sum_{j=0}^i\lambda(i){n\choose i}{i\choose j}g(j) \\
&=\sum_{i=0}^n\sum_{j=0}^i\lambda(i){n\choose j}{n-j\choose i-j}g(j) \\
&=\sum_{j=0}^n{n\choose j}\sum_{i=j}^n\lambda(i){n-j\choose i-j}g(j)
\end{aligned}
\]
然后就会发现,需要满足 \(\displaystyle {n\choose j}\sum_{i=j}^n\lambda(i){n-j\choose i-j}=[j=n]=[n-j=0]\),显然 \(\displaystyle{n\choose j}\neq 0(j\in [0,n]\cap\Z)\),因此,\(\displaystyle \sum_{i=j}^n\lambda(i){n-j\choose i-j}=[j=n]=[n-j=0]\),于是:
\[\displaystyle \sum_{i=j}^n\lambda(i){n-j\choose i-j}=\sum_{i=0}^{n-j}(-1)^i{n-j\choose i} \\
\Rightarrow \sum_{i=0}^{n-j}\lambda(i+j){n-j\choose i}=\sum_{i=0}^{n-j}(-1)^i{n-j\choose i}
\]
因此,\(\lambda(i+j)=(-1)^i\),即 \(\lambda(i)=(-1)^{i-j}\),你发现消不了 \(-j\) 这一项,但是没有关系,可以将右边的 \((-1)^i\) 改写成 \((-1)^{n-j-i}\),此时你会发现 \(\lambda(i+j)=(-1)^{n-i-j}\),因此 \(\lambda(i)=(-1)^{n-i}\).
其实还有更简单的证明:
\[f(n)=\sum_{i=0}^n\frac{n!}{i!(n-i)!}g(i)\Rightarrow\frac{f(n)}{n!}=\sum_{i=0}^n\frac{g(i)}{i!}\times \frac{1}{(n-i)!}
\]
因此,有
\[\hat F=\hat G\times e^x\Rightarrow \hat G=\hat F\times e^{-x}\Rightarrow \frac{g(n)}{n!}=\sum_{i=0}^n\frac{(-1)^{n-i}}{(n-i)!}\frac{f(i)}{i!}\Rightarrow g(n)=\sum_{i=0}^n(-1)^{n-i}{n\choose i}f(i)
\]
两步解决(
至此,我们得到了二项式反演的一个形式:
\[f(n)=\sum_{i=0}^n{n\choose i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}f(i)
\]
另外一个形式:
\[f(n)=\sum_{i=0}^n(-1)^i{n\choose i}g(i)\Leftrightarrow g(n)=\sum_{i=0}^n(-1)^i{n\choose i}f(i)
\]
数论中的容斥原理
考察 \(\varphi(n)=\norm{\set{x|1\le x\le n\land\gcd(x,n)=1}}\),要计算 \(\varphi(n)\),我们可以用 \(\displaystyle n=\prod_{i=1}^c p_i^{t_i}\) 中 \(n\) 的所有质因子来进行容斥 —— 因为所谓 \(\gcd(x,n)=1\),实际上就是 \(x\) 不含有任何一个 \(p_i\),定义性质 \(P_i\) 表示元素不含有质因子 \(p_i\),那么,目标是 \(\displaystyle \norm{\bigcap_{i=1}^c S_i}\),又可以进行容斥:
\[\varphi(n)=\displaystyle \norm{\bigcap_{i=1}^c S_i}=\norm U-\norm{\bigcup_{i=1}^c \bar{S_i}}=n-\sum_i\frac{n}{p_i}+\sum_{i<j}\frac{n}{p_ip_j}-\cdots+(-1)^c\frac{n}{\prod_{i=1}^c p_i} \\
\Rightarrow \varphi(n)=n\prod_{i=1}^n \brak{1-\frac{1}{p_i}}
\]
这就是欧拉公式了。
当然,如果你足够细心,你会发现我们实际上只在质数上进行容斥,并且在容斥的过程中,取的质数次数均为一次,因此这些质数任意选出一些,他们的乘积仍然是一个__无平方因子数__,而无平方因子数的容斥系数,显然只和其含有多少个质因数有关,因此,我们可以在正整数集上,再定义一个专门针对无平方因子数的函数,它的正负号取决于无平方因子数含有的质数个数,这样,我们就得到了莫比乌斯函数:
\[\mu(n)=\begin{cases}
1&n=1 \\[2ex]
(-1)^k&n=\prod_{i=1}^kp_i \\[2ex]
0&\text{otherwise}
\end{cases}
\]
因此我们可以得到另外的一个关于 \(\varphi(n)\) 的表达式:\(\displaystyle \varphi(n)=\sum_{d\mid n}\mu(d)\frac{n}{d}\).
概率论中的容斥
对于__同一概率空间中__的事件 \(A_1,A_2,\cdots,A_n\),依然存在相似的容斥原理:
\[\text{P}\brak{\bigcup_{i=1}^nA_i}=\sum_{i}\text{P}(A_i)-\sum_{i<j}\text{P}(A_i\cap A_j)+\sum_{i<j<k}\text{P}(A_i\cap A_j\cap A_k)-\cdots+(-1)^{n-1}\text{P}\brak{\bigcap _{i=1}^n A_i}
\]
对于概率只和事件个数有关,那么还可以简化为:
\[\text{P}\brak{\bigcup _{i=1}^n A_i}=\sum_{i=1}^n(-1)^{i-1}{n\choose i}a_i
\]
一般形式的容斥原理
对于两个关于集合的函数 \(f(S),g(S)\),若
\[f(S)=\sum_{T\subset S}g(T)
\]
那么就有
\[g(S)=\sum_{T\subset S}(-1)^{\norm S-\norm T}f(T)
\]
另外一个形式:
\[f(S)=\sum_{T\supset S}g(T)\Leftrightarrow g(S)=\sum_{T\supset S}(-1)^{\norm S-\norm T}f(T)
\]
这个形式只需要将上面取补集即可。
这两个东西也被称为子集反演。
MinMax容斥(MinMax反演)
这个东西就是可以让 \(\min\) 和 \(\max\) 到处换过来换过去。最基本的式子:
\[\max(S)=\sum_{T\subset S}(-1)^{\norm T+1}\min(T) \\
\min(S)=\sum_{T\subset S}(-1)^{\norm T+1}\max(T)
\]
证明就考虑每一项是否能对上,由于两个式子长得差不过,就证上面那个。
考虑当前元素是 \(S\) 中第 \(k\) 大的,那么这个元素左边的系数就是 \([k=1]\),右边的系数,它要作为 \(T\) 中最小的,就是只在它或者比它大的元素中选,因此右边的系数是 \(\displaystyle \sum_{i=1}^{k}(-1)^{i+1}{k-1\choose i-1}=\sum_{i=0}^{k-1}(-1)^{i+2}{k-1\choose i}=\sum_{i=0}^{k-1}(-1)^{i}{k-1\choose i}=[k-1=0]=[k=1]\),得证。
它还可以推广为 \(\rm kthmax\),设 \(\text{kthmax}(S)\) 表示 \(S\) 中第 \(k\) 大的,它依然可以使用 \(\min\) 来表达,至于容斥系数,考虑使用待定系数法来解,假设当前的元素是第 \(p\) 大的,那么我们要解的是
\[\begin{aligned}{}
[p=k]&=\sum_{i=1}^p\lambda(i){p-1\choose i-1} \\
&=\sum_{i=0}^{p-1}\alpha(i){p-1\choose i}&{\alpha(i)=\lambda(i+1)} \\
\end{aligned}
\]
将其二项式反演,可以得到
\[\alpha(p-1)=\sum_{i=0}^{p-1}(-1)^{p-1-i}{p-1\choose i}[i=k-1]=(-1)^{p-k}{p-1\choose k-1}
\]
因此 \(\displaystyle \lambda(i)=\alpha(i-1)=(-1)^{i-k}{i-1\choose k-1}\),所以可以得到 \(\rm kthmax\) 的式子:
\[\text{kthmax}(S)=\sum_{T\subset S,\norm T\ge k}(-1)^{\norm T-k}{\norm T-1\choose k-1}\min(T)
\]
当然,它也是可以用在期望上面的:
\[E(\max(S))=\sum_{T\subset S}(-1)^{\norm T+1}E(\min(T))
\]
然后它就可以做题了。
先写到这里
还有的斯特林反演之类的东西......