CF1919E Counting Prefixes

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)\) 的时间复杂度内解决了这个问题。

代码实现

代码实现中有非常多需要注意的细节。

  • 对于起点情况的处理
  • 对于不合法情况的判断
  • 初始序列的构建

建议先参考代码,仔细思考。

参考代码

posted @ 2024-06-07 09:37  DeepSeaSpray  阅读(2)  评论(0编辑  收藏  举报