組合數學亂寫

臨時抱佛腳

還是一樣,模板都有標記


P3197

減法原理。

\(m^n - m(m-1)^{n-1}\)

記錄

P2822

被 k 整除相當於膜 k = 0, 所以直接做。

P2290【prufer序列】

直接 prufer 序列, 度數爲 d 相當於在 prufer 序列中出現 d-1 次, 所以直接可重集排列。

darkbzoj記錄】全是小數據耶

lg86pts】說好的答案 \(\le 10^{17}\) 呢?

P3807【lucas 定理】

背板子,

\[\binom nm\mod p = \binom{\lfloor n/p\rfloor}{\lfloor m/p\rfloor}*\binom{n\mod p}{m\mod p}\mod p \]

記錄

P7044

題面似曾相識(

考慮某個子串對最終答案的貢獻。

\(p_{l,r,k}\) 表示子串 \([l,r]\)\(k\) 級偏值。

那麼:

\[p_{1,n,k} = \underbrace{\sum_{1\le l_{k-1}\le r_{k-1}\le n}\sum_{l_{k-1}\le l_{k-2}\le r_{k-2}\le r_{k-1}}\cdots\sum_{l_{1}\le l_0\le r_0\le r_1}}_{k個\sum} p_{l_0,r_0,0} \]

那麼對於一個固定的 \(l_0,r_0\), 來算一下它對整個答案的貢獻。

這個就是 \(1,l_{k-1},\dots, l_0\) 這邊和 \(r_0,r_1,\dots,n\) 這邊的情況, 是本質一樣的問題。

以前者爲例,這個其實就是 \(x_k+x_{k-1}+\cdots+x_1 = l_0-1\) 的非負整數解。(這裏的每個變量都表示某個 \(l_{i+1}-l_i\), 即左邊的 l 到右邊的 l 的距離,總的來說,說得隨便一點就是從 \(1\) 開始不斷加 \(\Delta\) 要正好到達 \(l_0\)

那麼:

\[p_{1,n,k} = \sum_{1\le l\le r\le n}p_{l,r,0}\binom{l+k-2}{k-1}\binom{n-r+k-1}{k-1} \]

繼續考慮 \(p_{l,r,0}\), 這個就是對區間做一次括號匹配後無法匹配的括號總個數。

然後這個怎麼算呢

這個牛逼式子或許可以分治算,但我沒深入想, 還是想題解裏提出的枚舉一個數據維護一堆東西的做法。

這個做法必須要能計算一個括號對於一堆 \(p_{l,r,0}\) 的貢獻。

但是這裏說的 “貢獻” 太謎語人了, 需要進一步考察。

首先序列括號匹配的基本事實是, 整個序列的所有單個括號, 如果其有匹配的括號, 那麼這個括號是一定的, 能否找出這對括號, 只取決於掃描的區間是否覆蓋了這對括號。

現在考慮從 \(l\) 掃到 \(r\) 做一次括號匹配。

再明確一些事實:

  1. 如果從 \(l\) 開始從左往右掃括號匹配, 某個位置 i 的 ) 可以得到匹配, 那麼在固定 \(r\) 的情況下,從小於 \(l\) 的位置開始掃也可以得到匹配,。
  2. 如果掃到 \(r\) 可以使某個位置 \(i\)( 可以得到匹配, 那麼在固定 \(l\) 的情況下, 掃到大於 \(r\) 的位置也可以得到匹配

所以先考慮從 1 掃到 n 進行括號匹配, 對於第 i 個位置, 設 p(i) 爲與 i 上的括號匹配的括號的位置。

那麼考慮 i 上是左括號, 會對哪些區間產生貢獻, 依據上面的分析, 是左區間在 \([1,i]\), 右區間在 \([i,p(i)-1]\) 的所有區間;考慮 i 上是右括號, 則是右區間在 \([i,n]\), 左區間在 \([p(i)+1,i]\) 的所有區間。

所以如果考慮從 1 到 n 枚舉 r,然後維護 \(\sum\limits_{1\le l\le r}p_{l,r,0}\dbinom{l+k-2}{k-1}\) , 就可以:

如果當前是左括號, 當前維護的區間都要加上 1 的貢獻,然後到 p(i) 時取消。

如果是右括號, 則對 \(l\)\([p(i)+1,i]\) 的區間加上貢獻,不取消。

記錄

P2480

\[ans = g^{\sum_{k\mid n}\binom nk} \mod 999911659 \]

顯然指數高精都存不下, 考慮歐拉定理。

由於膜數是質數, 所以只要算 \(\sum_{k\mid n}\binom nk\mod 999911658\) 就可以快速冪了。

這個數是個偶數, 將其質因數分解, 得到的結果是 \(2\times 3\times 4679\times35617\)

可以直接分別計算然後 CRT 合併。

記錄看我優美代碼!

P4769【折線法】

不考慮字典序的限制, 等價於求最長下降子序列的長度不超過 2 的排列的數量。

考慮 dp, 設 \(f_{i,j}\) 爲從左掃描到了第 i 個, 最大值爲 j 且合法的方案數。

考慮接下來放在 i+1 的那個數, 如果大於 j, 那麼顯然可以, 如果小於 j, 那麼就恰好形成了一個長度爲 2 的下降子序列, 進而, 再放更小的話, 就不合法了, 所以如果小於 j, 應該放最小的, 但是會不會讓原本合法的序列不合法?不會的, 因爲這樣的話說明在前面的決策點沒有遵循小於 j 的放最小的決策原則。

所以,

\[f_{i,j} = \sum_{k=i-1}^j f_{i-1,k} \]

也可以寫成

\[f_{i,j} = f_{i,j-1} + f_{i-1,j} \]

這等價於只可以向右或向上走,從 \((0,0)\) 走到 \((i,j)\), 且一直在直線 \(y=x\) 上方的方案數。

現在加上字典序的限制, 枚舉第一次高於限制的位置 i,計算答案。

現在若要計算從 \((i,j)\)\((n,n)\) 的不計字典序限制的方案數, 可以採用折線法。

具體來說, 第一次走到 \(y=x\) 下方等價於第一次接觸到 \(y=x-1\) 這條直線, 將路徑沿着這條直線翻折, 發現相當於一個從對稱後的起始點走到 \((n,n)\) 的方案, 直接算這種方案數就等於不合法的方案數。

(x,y) 在與 y = x-1 對稱後變爲 (y+1,1-x)。

記錄

P4931

首先選出 k 對情侶讓他們乖♂乖♂坐♂好♂, \(\dbinom nk\dbinom nkk! 2^k\)

然後剩下的錯排, 設 \(f_n\) 爲 n 對都不匹配的方案數。

考慮第一排座位, 選出一對不是情侶的, 有 \(2n\times (2n-2)\) 種選法, 然後考慮這一對各自的情侶, 如果坐在一起, 就是 \(2\times (n-1)\times g[n-2]\), 反之, 就是相當於這兩個是情侶(不能坐在一起), 就是 \(g[n-1]\), 所以:

\[g[n] = 2n\times(2n-2)\times(2(n-1)g[n-2]+g[n-1]) \]

預處理之後在線回答詢問就行了。

記錄

P2532【卡特蘭數】

推理過程

高精先不寫。

P5395【第二類斯特林數 · 行】

第二類斯特林數有一個性質:

\[m^n = \sum_{i=0}^m{n\brace i}\binom mi i! \]

組合意義的證明:左邊是把 n 個不同的數放在至多 m 個不同的集合的方案數, 右邊則是枚舉放在了多少個集合裏, 然後選出藥放的集合, 然後放, 然後標號。

由二項式反演:

\[{n\brace m}m! = \sum_{i=0}^m(-1)^{m-i}\binom mi i^n\\ {n\brace m} = \sum_{i=0}^m\frac{(-1)^{m-i}}{(m-i)!}\times \frac{i^n}{i!} \]

卷積即可。

記錄

P6620【O(n2)普通冪轉下降冪】

首先 n 這麼大肯定要交換求和號

\[\sum_{k=0}^n f(k)\times x^k\times\binom nk\\ \sum_{k=0}^n x^k\binom nk\sum_{i=0}^m a_ik^i\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nka_ik^i \]

可以把 \(f(k)\) 轉成下降冪多項式。

\[\sum_{i=0}^m \sum_{k=0}^n x^k\binom nkb_ik^{\underline i}\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nkb_i\binom ki i!\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nib_i\binom {n-i}{k-i} i!\\ \sum_{i=0}^m i!b_i\binom ni \sum_{k=0}^n x^k\binom {n-i}{k-i}\\ \sum_{i=0}^m i!b_i\binom ni x^i \sum_{k=i}^n x^{k-i}\binom {n-i}{n-k}\\ \sum_{i=0}^m i!b_i\binom ni x^i \sum_{k=0}^{n-i} x^{n-k-i}\binom {n-i}{k}\\ \sum_{i=0}^m b_in^{\underline i} x^i (x+1)^{n-i} \]

如此, 只要 \(O(n^2)\) 處理下降冪再 \(O(n^2\log w)\) 計算就行了。

轉下降冪的方法:

\[x^i = \sum_{j=0}^i {i\brace j}x^{\underline j} \]

記錄

P3200

稍加分析即可知道答案是卡特蘭數。

\[h_n = \frac{\dbinom {2n}n}{n+1} \]

exLucas!

分解質因數就行了。

記錄

CF814E

首先用 bfs 確立最短路樹。

由於最短路樹是唯一的,所以原圖中沒有連接在 bfs 樹上深度不同的兩個點的邊。

由於最短路長度隨編號遞增,所以 bfs 樹中同深度的節點的編號必定都是連續的一段。

區間 DP:

\(f(i,j)\) 表示只考慮前 i 個點的情況下, 第 i 個點所在深度有 j 個點, 且更淺的深度的點的度數的限制均被滿足, i 的深度的點除了與父親的連邊都暫時不考慮, 方案數是多少。

\(g(i,j,k)\) 表示這一層有 \(i\) 個點, 上一層有 \(j\) 個度數爲 2 的點, \(k\) 個度數爲 3 的點, 滿足上一層的度數限制的方案數。

那麼轉移就是:

\[f(i,j) = \sum_{1\le k< i - j}f(i-j,k)\times g(j,k_2,k_3) \]

其中, \(k2,k3\) 分別表示度數爲 2 和爲 3 的點。

最終答案:

\[ans = \sum_{1\le k\le n} f(n,k)\times g(0,k_2,k_3) \]

考慮計算 \(g\)

\(g(0,0,0) = 1\)

考慮 \(g(0,0,k)\), 只能靠層內成環實現,由於不能有重邊,環還得是長度 >3 的:

\[g(0,0,k) = \sum_{l=3}^k g(0,0,k-l)\binom {k-l}{l-1}\frac{(l-1)!}2 \]

考慮 \(g(0,j,0)\), 只能靠層內配對實現, 進一步得到 \(2\mid j\), 考慮標號爲 1 的點與誰配對:

\[g(0,j,0) = g(0,j-2,0)\cdot (j - 1) \]

考慮 \(g(0,j,k)\), 考慮一個度數爲 2 的點, 它可以連接一個度數爲 2 的點, 也可以連接一個度數爲 3 的點:

\[g(0,j,k) = (j-1)\cdot g(0,j-2,k) + k\cdot g(0,j, k-1) \]

考慮 \(g(i,j,k)\), 考慮 i 個點中的一個, 它可以連接一個度數爲 2 的點, 也可以連接一個度數爲 3 的點:

\[g(i,j,k) = j\cdot g(i-1,j-1,k) + k\cdot g(i-1,j+1,k-1) \]

記錄

bzoj 1005

明♂明♂的 fa♂ 惱♂

prufer 序列。

如下定義一個有標號無根樹 \(T\) 的 prufer 序列:

選取 T 上標號最小的度數爲 1 的點 x, 將與 x 相鄰的點的標號加入好序列的末尾, 然後刪去 x 和對應的邊, 重複以上操作,直到樹中只剩下 2 個點。

顯然對於一個樹, 用其生成的 Prufer 序列是唯一的。

接下來證明對於每個序列,都存在唯一對應的樹。

初始令 \(G = \{1,2,\cdots,n\}\), 取 \(x = \min(G-Prufer)\), 將 x 與 Prufer 的第一項相連, 然後刪去 Prufer 的第一項和 G 中的 x。

重複以上操作, 直到 Prufer 爲空。

此時 \(|G| = 2\), 最後連接 G 中的兩個點即可。

如此,得到的樹一定是能生成這個 Prufer 序列的樹。

顯然若一個點 i 的度數爲 \(d_i\), 那麼它在 Prufer 序列中出現了 \(d_i-1\) 次。

那麼對於原題, 求有多少個長度爲 \(n - 2\) 的 Prufer 序列, 滿足度數的限制。

無解顯然很好判斷, 有解也好判斷。

Py♂thon♂ is♂ good♂。

對高精 PTSD, 不寫了。

loj6244

由於一個 k 排列中有 x 個是正確的, 有 \(\dbinom kx\) 種方案, 剩下 k - x 個位置就可以看作是從 n-x 個元素的子集中選出 k-x 個排列, x = 0 的方案數。

使用容斥原理, 記命題 \(P_i\) 表示排列中 i 還在位置 i, 那麼就是求不滿足所有命題的方案數:

\[\sum_{j=0}^{k-x}(-1)^j\binom{k-x}j (n-x-j)^{\underline {k-x-j}} \]

代碼就不寫了。

bzoj 1089

考慮深度 \(\le d\) 的 n 元樹的數目, 記爲 \(f_d\)

那麼顯然按照符號化方法的思想, \(f_d = f_{d-1}^n + 1\)

\(f_d - f_{d-1}\) 即爲最終的答案。

代碼就不寫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章