容斥 反演 學習筆記

容斥 反演 學習筆記

Tags: 數學,數論學習



參考:
https://blog.csdn.net/werkeytom_ftd/article/details/74701513
https://www.luogu.org/blog/KingSann/chu-tan-rong-chi-yuan-li
https://ac.nowcoder.com/discuss/184169?type=101&order=0&pos=10&page=1spa

這裏只是簡單整理一下,方便複習。(也沒多少東西... 由於沒時間補了)
也能夠看這裏.net


最基本的容斥

\(n\)種屬性,若干個物品,每一個物品可能有這\(n\)種屬性的若干種。假設咱們能夠容易地計算出\(f(S)\)表示屬性中至少包含\(S\)集合的物品個數。求至少有\(1\)種屬性的物品個數。(就是最經典的模型,有三科語數英,已知語數英各有多少人滿分,語數、數英、語英分別有多少人同時滿分,有多少人三科都滿分,求至少有一科滿分的人有多少)
不知道爲何反正咱們知道,答案是\(\sum_{s\in S}(-1)^{|s|+1}f(s)\)\(s\)爲全部科目的子集,\(f(s)\)\(s\)中全部科目都滿分的人數)。
考慮它爲何是對的。對於一個有\(n\)種屬性的物品,當\(n=0\)時,顯然不會被計算。咱們須要證實,\(n>0\)時,它會被剛好計算一次。
不難發如今枚舉\(i\)種屬性(大小爲\(i\)\(s\))時,它會被計算\(C_n^i\)次。因此它被統計的次數\(=\sum_{i=1}^nC_n^i(-1)^{i+1}=1\)(把一個\(-1\)提出來,補一個\(C_n^0\),二項式定理一下)。code

更通常的容斥

\(n\)種屬性,若干物品。假設咱們能夠容易地計算出,\(g(S)\)表示包含\(S\)集合的物品個數。且給定\(w(k)\)表示,當物品擁有\(k\)個屬性時它的價值是多少。求因此物品的價值和。、
咱們須要肯定一個容斥係數\(f(k)\),使得\(Ans=\sum_{s\in S}g(s)f(|s|)\)
同上,考慮令每一個物品被算入的貢獻等於咱們想要的數。即對於一個擁有\(k\)種屬性的物品,須要知足\[\sum_{i=1}^kC_k^if(i)=w(k)\]htm

\(f(i)\)是能夠遞推的。假設已知\(f(1)...f(k-1)\)\[\sum_{i=1}^kC_k^if(i)=w(k)\ \Rightarrow\ f(k)=w(k)-\sum_{i=1}^{k-1}C_k^if(i)\]blog

複雜度是\(O(n^2)\)的。
把階乘展開發現大概能寫成一個卷積形式,能夠多項式求逆作到\(O(n\log n)\)。也能夠反演去推。(見上面連接)
固然大部分題中是用\(O(n^2)\)/手推來找規律算的。ip

例題:「玲瓏杯」 線上賽 Round#17 B 當鹹魚也要按照基本法4.27模擬賽 A
下面是第一道例題:
\(Description\)
給定\(m\)個數\(A_i\)\(n\)。求\(1\sim n\)中有多少個數能被奇數個\(A_i\)整除。
\(T\leq 1000\)組數據,\(n\leq10^5,\ m\leq15\)
\(Solution\)
至少整除某個\(A_i\)集合的數有多少個很好算,因此考慮容斥。設容斥係數是\(f(i)\),答案是\(\sum_{s\in S}f(|s|)\lfloor\frac{n}{lcm(s)}\rfloor\)
對於被\(k\)個數整除的數,有\(\sum_{i=1}^kC_k^if(i)=k\ \text{mod}\ 2\)。能夠\(O(m^2)\)遞推或者打表得出\(f(i)\)(固然有規律是\(f(i)=(-2)^{i-1}\ (i\neq0)\))。而後就作完啦。開發


下面只是一些要背的式子get

二項式反演

\[f(n)=\sum_{i=0}^nC_n^ig(i)\ \Leftrightarrow\ g(n)=\sum_{i=0}^n(-1)^{n-i}C_n^if(i)\]

例題:[BZOJ3622]已經沒有什麼好懼怕的了
PS:已經不知道哪年能補上題目了。

斯特林反演

\[f(n)=\sum_{i=0}^n{n\brace i}g(i)\ \Leftrightarrow\ g(n)=\sum_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}f(i)\]

例題:[BZOJ4671]異或圖雅禮集訓18.1.16 方陣

莫比烏斯反演

\[F(d)=\sum_{d\mid n}f(d)\ \Leftrightarrow\ f(d)=\sum_{d\mid n}\mu(\frac nd)F(n)\\F(n)=\sum_{d\mid n}f(d)\ \Leftrightarrow\ f(n)=\sum_{d\mid n}\mu(\frac nd)F(d)\]

相關文章
相關標籤/搜索