CF1919E Counting Prefixes

DeepSeaSpray發表於2024-06-07

CF1919E Counting Prefixes

Rating:2600

題目大意

有一個由 -11 構成的數列 \(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)\) 的時間複雜度內解決了這個問題。

程式碼實現

程式碼實現中有非常多需要注意的細節。

  • 對於起點情況的處理
  • 對於不合法情況的判斷
  • 初始序列的構建

建議先參考程式碼,仔細思考。

參考程式碼