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)\) 的时间复杂度内解决了这个问题。
代码实现
代码实现中有非常多需要注意的细节。
- 对于起点情况的处理
- 对于不合法情况的判断
- 初始序列的构建
建议先参考代码,仔细思考。
标签:数列,sum,Prefixes,CF1919E,Counting,代码 From: https://www.cnblogs.com/DeepSeaSpray/p/18236554