[GJOI] 24_9-28 模拟赛

posted on 2024-09-28 08:28:07 | under | source

赛时

T1 是模拟,先跳过不写。T2 组合计数,一开始以为是容斥,然后转换思路解决了。T3 想了想发现就是插入法 dp 板子。

题解

T1:分类计算即可。

T2:考虑这个子序列,然后计算其对应原序列方案。按 yyc 的话来说,这叫检查反射。

可以发现,子序列相邻两数中间必须放偶数个小球,对于末尾随便放。枚举填充 \(2i\) 个小球,贡献为 \({i+L}\choose i\)

当然首尾段对奇偶性没有要求,所以枚举它们的奇偶。若要令一段是奇数就先放一个球即可。

T3:假如确定了奶牛排列 \(P\),那么相邻奶牛 \(P_i,P_{i+1}\) 的间隔至少是 \(\max(P_i,P_{i+1})\),记 \(sum=\sum \max(P_i,P_{i+1})\),那么不放先填了这 \(1+sum\) 个位置,则剩下 \(len-sum-1\) 个位置随便放,乘以一个组合数即可。注意不是 \(len\choose {sum+1}\),因为我们只关心填了几个而不是填在哪里。

注意到 \(sum\le d\times \max r\) 且答案只与 \(sum\) 有关,这启示我们计算 \(sum=k\)\(P\) 个数,插入法 dp 即可。\(r\) 从小到大放,设 \(f_{i,j,k}\) 表示前 \(i\) 个数构成 \(j\) 段,\(sum=k\) 时的方案数。转移是容易的。

复杂度 \(O(d^4)\)

代码

好丑不想放。

posted @ 2026-01-12 20:03  Zwi  阅读(1)  评论(0)    收藏  举报