證明基本都是自己瞎證的,如果證法比較丑請見諒。
容斥原理
一道小學題 求 \(n(n\le 10^9)\) 以內不能被 \(2,3,5\) 整除的整數個數。
考慮這個 Venn 圖。三個圓分別表示被 \(2,3,5\) 整除的數構成的集合,那么要求的就是圓外的面積。
假設什么限制也不管,只管一共有 \(n\) 個數,那么每塊都是算一遍。
圓外的面積自然就是總面積減去里面的,我們想到 \(n-\lfloor \frac{n}{2}\rfloor-\lfloor \frac{n}{3}\rfloor-\lfloor \frac{n}{5}\rfloor\)。
你發現重合的部分多扣了,所以你又把兩兩的重合部分加上,現在你的答案是 \(n-\lfloor\frac{n}{2}\rfloor-\lfloor\frac{n}{3}\rfloor-\lfloor\frac{n}{5}\rfloor+\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor\)。
你發現中間(三圓重合的部分)又多出來了,把它減掉。\(n-\lfloor\frac{n}{2}\rfloor-\lfloor\frac{n}{3}\rfloor-\lfloor\frac{n}{5}\rfloor+\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor-\lfloor\frac{n}{2\times 3\times 5}\rfloor\)。
你發現它完美了:該算的被算了一遍,別的被算了零遍。
考慮一個比較一般的容斥的式子:
記 \(A_1\) 到 \(A_n\) 是 \(n\) 個集合,\(U=\{1,2,\cdots ,n\}\)。那么
為什么這是對的?
考慮一個元素。假設它出現在了 \(n\) 個集合中的 \(k(k>0)\) 個。則它的貢獻恰好是
\(\sum_{i=1}^k (-1)^{i-1}\binom ki\\ =1-\sum_{i=0}^k (-1)^i\binom ki\\ =1-(-1+1)^k\\ =1\)
。我們發現有出現過的算了一次,沒出現過的算了零次。
根據上面的經驗,我們發現,容斥就是通過加加減減的方式,使得符合要求的方案算到恰好一遍,其他方案算到零遍,以做到不重不漏不多不少。
二項式反演
小學題加強版 對 \(k=0,1,2,3\),分別求出 \(n(n\le 10^9)\) 以內恰能被 \(2,3,5\) 中的 \(k\) 個整除的整數個數。
先考慮 \(k=3\),這時候答案顯然是三圓重合的部分,就是 \(f_3=\lfloor\frac{n}{2\times 3\times 5}\rfloor\)。
然后是 \(k=2\),這時我們想到 \(\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor\)。但是你發現中間那塊被多算了 \(3\) 遍,於是有 \(f_2=\lfloor\frac{n}{2\times 3}\rfloor+\lfloor\frac{n}{2\times 5}\rfloor+\lfloor\frac{n}{3\times 5}\rfloor-\binom 32f_3\) 了。
接下來算 \(k=1\),和剛才一樣,你算出了 \(f_1=\lfloor\frac{n}{2}\rfloor+\lfloor\frac{n}{3}\rfloor+\lfloor\frac{n}{5}\rfloor-\binom 21f_2-\binom 31f_3\)。
那么 \(f_0=n-\binom 10f_1-\binom 20f_2-\binom 30f_3\)。
考慮比較一般的問題。你有 \(n\) 個限制,對所有的 \(k\),要求出滿足恰好 \(k\) 個限制的方案數。
對於一個 \(k\),你強行欽定它滿足其中 \(k\) 個條件,而算出答案為 \(g_k\);記最后的答案為 \(f_k\)。那么根據剛才的經驗,很明顯:
但這個復雜度是 \(n^2\) 的,有時候 \(n\) 很大,你算不了。有沒有更快的做法?
那你移個項,容易得到:\(g_k=\sum_{j=k}^n\binom jk f_j\)。
組合數拆出來:\(k!g_k=\sum_{j=k}^n \frac{1}{(j-k)!}j!f_j\)
設 \(g'_k=g_{n-k}(n-k)!,f'_k=f_{n-k}(n-k)!\)。那么 \(g'_k=\sum_{j=0}^k\frac{1}{(k-j)!}f'_j\)。
然后是喜聞樂見的生成函數環節。\(G_1(x)=\sum_i g'_ix^i,F_1(x)=\sum_i f'_ix^i\)。
那么就有 \(G_1(x)=e^xF_1(x)\)。所以 \(F_1(x)=e^{-x}G_1(x)\)。而 \(e^{-x}=\sum_i (-1)^i\frac{x^i}{i!}\)。
這時候我們就有了明顯的思路:先從 \(g\) 數組轉成 \(G_1(x)\),然后使用 FFT/NTT 做卷積,算出 \(F_1(x)\),然后轉成 \(f\) 數組。
時間復雜度 \(O(n\log n)\)。
但是有時候我們不僅想這樣求,還想把式子給他寫得漂亮些。
剛剛我們推到了 \(F_1(x)=e^{-x}G_1(x)\),其中 \(e^{-x}=\sum_i (-1)^i\frac{x^i}{i!}\)。
也就是 \(f'_k=\sum_{j=0}^k\frac{(-1)^{k-j}}{(k-j)!}g'_j\)。
\(k!f_k=\sum_{j=k}^n\frac{(-1)^{j-k}}{(j-k)!}j!g_j\)
\(f_k=\sum_{j=k}^n\binom jk(-1)^{k-j}g_j\)。事實上啊,
這個式子就是二項式反演了。二項式反演還有更好看的形式:
min-max 容斥
再看看這個容斥的式子:
記 \(A_1\) 到 \(A_n\) 是 \(n\) 個集合,\(U=\{1,2,\cdots ,n\}\)。那么\( |\bigcup_{i=1}^n A_i|=\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}|\bigcap_{i\in S}A_i| \)。
試試把 \(\bigcup\) 換成 \(\max\),把 \(\bigcap\) 換成 \(\min\),集合 \(A_i\) 改成數 \(a_i\) 吧。那么得到:
舉個例子:
\( \max\{2,3,4\}\\ =\min\{2\}+\min\{3\}+\min\{4\}-\min\{2,3\}-\min\{2,4\}-\min\{3,4\}+\min\{2,3,4\}\\ =2+3+4-2-2-3+2 =4 \)
你發現它竟然是對的!
能證明嗎?
一樣的思路,不妨假設 \(a_1\le a_2\le \cdots\le a_n\)。考慮 \(a_x\) 被算到的次數,為:
\(\sum_{i=0}^{n-x}\binom {n-x}i (-1)^{n-x}\)
(它要是子集的最小值,該子集的其他元素就只能選后面的)。
當 \(k<n\) 時,化為 \((-1+1)^{n-k}=0\);當 \(k=n\) 時,化為 \(1\)。
故只有最大的那個值貢獻到了答案,它就是對的。這就是 min-max 容斥。
但是你覺得這個東西很蠢,最大值明明可以直接算。
之所以要拿出來說,是因為 min-max 容斥在期望下也是對的。
也就是說,
成立。
舉例說明:袋子里有 \(n(n\le 20)\) 種顏色的球,每一回合你會拿出一個球然后放回,摸出的球為第 \(i\) 種顏色的概率為 \(p_i(\sum p_i=1)\)。求期望多少回合后,每種顏色都摸到過至少一次。(HDU4336)
設第 \(i\) 種顏色期望 \(x_i\) 次被第一次摸到,則答案是 \(E(\max_{i=1}^n x_i)\)。
你發現 \(E(\max x_i)\) 不好求,\(E(\min_{i\in S}x_i)\) 還比較好求,為 \(\frac{1}{\sum_{i\in S} p_i}\)。
套用剛剛的式子,就得到
\( E(\max_{i=1}^n x_i)\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}E(\min_{i\in S}x_i)\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\frac{1}{\sum_{i\in S} p_i} \)
\(n\) 只有 \(20\),直接算就行了。
Wait! 但是我們還沒證明 min-max 容斥在期望下也是對的呢!
考慮在這里計算期望的一種方法:
\(E(\max_{i=1}^n x_i)=\sum_tP(x=t)\max_{i=1}^n t_i\)
\(E(\min_{i=1}^n x_i)=\sum_tP(x=t)\min_{i=1}^n t_i\)
其中 \(t\) 是一個長度為 \(n\) 的序列。
\(E(\max_{i=1}^n x_i)\\ =\sum_tP(x=t)\max_{i=1}^n t_i\\ =\sum_tP(x=t)\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\min_{i\in S}t_i\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}\sum_tP(x=t)\min_{i\in S}t_i\\ =\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-1}E(\min_{i\in S}x_i) \)
嗯,這樣就證完了,也沒啥意思。
還有更強的式子
記 \(U=\{1,2,\cdots ,n\}\),\(\operatorname{kthmax}_{i=1}^n a_i\) 為 \(a\) 數組的第 \(k\) 大值,則:
(規定 \(n<m\) 時 \(\binom nm=0\))
證明:
不妨假設 \(a_1\le a_2\le \cdots\le a_n\)。
\(\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}\min_{i\in S}a_i\\ =\sum_{i=1}^n a_i\sum_{S\subset U,S\ne \emptyset}(-1)^{|S|-k}\binom{|S|-1}{k-1}[a_i=\min_{j\in S}a_j]\\ =\sum_{i=1}^n a_i\sum_{j=k}^n\binom{n-i}{j-1}\binom{j-1}{k-1}(-1)^{j-k}\)
對於組合數,有等式 \(\binom ab\binom bc=\binom ac\binom{a-c}{b-c}\)。於是:
\( =\sum_{i=1}^n a_i\sum_{j=k}^n\binom{n-i}{k-1}\binom{n-i-k+1}{j-k}(-1)^{j-k}\\ =\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=k}^n\binom{n-k+1-i}{j-k}(-1)^{j-k}\\ =\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j} \)
當 \(i=n-k+1\) 時,\(\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=1\);
否則 \(\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=0\)。
所以 \(\sum_{i=1}^n a_i\binom{n-i}{k-1}\sum_{j=0}^{n-k+1-i}\binom{n-k+1-i}{j}(-1)^{j}=\operatorname{kthmax}_{i=1}^n a_i\)
於是證完了。
於是又有
EXTRA
其實還有一個關於 \(\gcd\) 和 \(\operatorname{lcm}\) 的容斥。
它長這樣:\(\operatorname{lcm}_{i=1}^n a_i=\prod_{S\subset U,S\ne \emptyset}(\gcd_{i\in S}a_i)^{(-1)^{|S|-1}}\)
其中 \(U=\{1,2,\cdots ,n\}\)。
為什么對?你考慮 \(a_i=\prod_k p_k^{\alpha_k}\)。
- 取兩個數的 \(\gcd\) 就是每個 \(\alpha\) 取 \(\min\);
- 取兩個數的 \(\operatorname{lcm}\) 就是每個 \(\alpha\) 取 \(\max\);
- 兩個數相乘就是 每個 \(\alpha\) 求和;
- 兩個數相除就是 每個 \(\alpha\) 求差。
於是那個式子就相當於對每個 \(\alpha\) 同時搞了個 min-max 容斥,自然就是對的了。
例題
二項式反演
luogu P4859 已經沒有什么好害怕的了
luogu P4491 染色
luogu P5401 珍珠
min-max 容斥
HDU 4336 Card Collector
luogu P3175 按位或
HDU4624 Endless Spin
BZOJ 4833 最小公倍佩爾數
luogu P4707 重返現世
AGC 038E Gachapon