CF1919E Counting Prefixes
Rating:2600
題目大意
有一個由 -1
與 1
構成的數列 \(A\)。告訴你它的字首和升序排序的數列 \(P\)。求有多少個滿足方案的數列 \(A\)。
多組資料,其中 \(A\) 的長度 \(n\) 有。
\(\sum n \leq 5000\)。
解題思路
首先我們考慮列舉 \(s = \sum A\)。
我們考慮先往右邊“走”。構建一個序列 \(\{1,1,\cdots,1,-1,-1,\cdots,-1\}\)。
接著我們往裡面插入一些 \(\{-1,1\}\) 這樣會使得當前位置 \(P\) 以及 \(P-1\) 多出現一次。
這樣我們可以考慮從最高點 \(P_n\) 開始往下補全它們的出現次數。
若一個位置 \(P_i\) 需要出現 \(C_i\) 次,已經出現過 \(B_i\) 次,我們將一些 \(\{-1,1\}\) 插入到 \(B_i\) 個位置中。根據排列組合知識可以得到其對答案的貢獻為。
\[\binom{C_i-1}{B_i-1}
\]
我們在 \(O(n^2)\) 的時間複雜度內解決了這個問題。
程式碼實現
程式碼實現中有非常多需要注意的細節。
- 對於起點情況的處理
- 對於不合法情況的判斷
- 初始序列的構建
建議先參考程式碼,仔細思考。
參考程式碼