[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)\)。
代码
好丑不想放。

浙公网安备 33010602011771号