臨時抱佛腳
還是一樣,模板都有標記
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 定理】
背板子,
【記錄】
P7044
題面似曾相識(
考慮某個子串對最終答案的貢獻。
設 \(p_{l,r,k}\) 表示子串 \([l,r]\) 的 \(k\) 級偏值。
那麼:
那麼對於一個固定的 \(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_{l,r,0}\), 這個就是對區間做一次括號匹配後無法匹配的括號總個數。
然後這個怎麼算呢
這個牛逼式子或許可以分治算,但我沒深入想, 還是想題解裏提出的枚舉一個數據維護一堆東西的做法。
這個做法必須要能計算一個括號對於一堆 \(p_{l,r,0}\) 的貢獻。
但是這裏說的 “貢獻” 太謎語人了, 需要進一步考察。
首先序列括號匹配的基本事實是, 整個序列的所有單個括號, 如果其有匹配的括號, 那麼這個括號是一定的, 能否找出這對括號, 只取決於掃描的區間是否覆蓋了這對括號。
現在考慮從 \(l\) 掃到 \(r\) 做一次括號匹配。
再明確一些事實:
- 如果從 \(l\) 開始從左往右掃括號匹配, 某個位置 i 的
)
可以得到匹配, 那麼在固定 \(r\) 的情況下,從小於 \(l\) 的位置開始掃也可以得到匹配,。 - 如果掃到 \(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
顯然指數高精都存不下, 考慮歐拉定理。
由於膜數是質數, 所以只要算 \(\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 的放最小的決策原則。
所以,
也可以寫成
這等價於只可以向右或向上走,從 \((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]\), 所以:
預處理之後在線回答詢問就行了。
【記錄】
P2532【卡特蘭數】
【推理過程】
高精先不寫。
P5395【第二類斯特林數 · 行】
第二類斯特林數有一個性質:
組合意義的證明:左邊是把 n 個不同的數放在至多 m 個不同的集合的方案數, 右邊則是枚舉放在了多少個集合裏, 然後選出藥放的集合, 然後放, 然後標號。
由二項式反演:
卷積即可。
【記錄】
P6620【O(n2)普通冪轉下降冪】
首先 n 這麼大肯定要交換求和號
可以把 \(f(k)\) 轉成下降冪多項式。
如此, 只要 \(O(n^2)\) 處理下降冪再 \(O(n^2\log w)\) 計算就行了。
轉下降冪的方法:
【記錄】
P3200
稍加分析即可知道答案是卡特蘭數。
exLucas!
分解質因數就行了。
【記錄】
CF814E
首先用 bfs 確立最短路樹。
由於最短路樹是唯一的,所以原圖中沒有連接在 bfs 樹上深度不同的兩個點的邊。
由於最短路長度隨編號遞增,所以 bfs 樹中同深度的節點的編號必定都是連續的一段。
區間 DP:
設 \(f(i,j)\) 表示只考慮前 i 個點的情況下, 第 i 個點所在深度有 j 個點, 且更淺的深度的點的度數的限制均被滿足, i 的深度的點除了與父親的連邊都暫時不考慮, 方案數是多少。
記 \(g(i,j,k)\) 表示這一層有 \(i\) 個點, 上一層有 \(j\) 個度數爲 2 的點, \(k\) 個度數爲 3 的點, 滿足上一層的度數限制的方案數。
那麼轉移就是:
其中, \(k2,k3\) 分別表示度數爲 2 和爲 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, 那麼就是求不滿足所有命題的方案數:
代碼就不寫了。
bzoj 1089
考慮深度 \(\le d\) 的 n 元樹的數目, 記爲 \(f_d\)。
那麼顯然按照符號化方法的思想, \(f_d = f_{d-1}^n + 1\)。
\(f_d - f_{d-1}\) 即爲最終的答案。
代碼就不寫了。