CF1716F

CF1716F

题目描述

有 \(n\) 个袋子,每个袋子里有 \(m\) 个球,球的编号从 \(1\) 到 \(m\) 。对于每个 \(i∈[1,m]\) ,每个袋子中正好有一个编号为 \(i\) 的球。

你必须从每个袋子中恰好取一个球(所有袋子都不同,例如,从第一个袋子取球 \(1\) 并从第二个袋子取球 \(2\) 与从第一个袋子取球 \(2\) 并从第二个袋子取球 \(1\) 不是同一种情况)。然后,你计算你取出的球中数字为 奇数 的球的数量。将这些球的数量记为 \(F\)。

你任务是计算从每个袋子中取出 \(n\) 个球的所有可能方式下 \(F^k\) 的总和。对 \(998244353\) 取模。

\(t\) 组数据,\(t\le 5000\) 。

\(1≤n,m≤998244352; 1≤k≤2000\)

做法:

首先可以非常显然的写出一个 \(O(tn)\) 的做法,但是显然时间复杂度是巨大的!

但注意到 \(k\le2000\) 所以时间复杂度应该是类似 \(O(tk)\) 。

由于答案是 \(\sum F^k\) ,所以肯定是有组合意义的:

先确定一个选球方案,然后有序的选取 \(k\) 个位置(可重),使得这 \(k\) 个位置上的球的编号都是奇数的方案数。

这样可以转换统计顺序:

先有序的选取 \(k\) 个位置,然后再确定一个选球方案,使得这 \(k\) 个位置上都是奇数的方案数。

如果选取的位置总共有 \(c\) 个,那么其对应选球的方案数就是:

\[\left\lceil \frac{m}{2} \right\rceil^c\times m^{n-c} \]

表示这 \(c\) 个位置只能选奇数,其他任意。

所以现在的关键就变成了,求有序选取 \(k\) 个位置,使得选取的位置只有 \(c\) 个的方案数。

可以先把这 \(c\) 个位置固定下来,方案数为 \(\binom{n}{c}\)。

然后相当于是要选 \(k\) 个位置,使得选中的位置都在这 \(c\) 个位置上。

就是把 \(k\) 个位置分成 \(c\) 组的方案数乘上全排列的方案数。

前者是第二类斯特林数,可以预处理 \(O(k^2)\) 解决 。

所以有序选取 \(k\) 个位置,使得选取的位置只有 \(c\) 个的方案数为:

\[\binom{n}{c}\times c! \times S(k,c) \]

其中 \(S(k,c)\) 表示把 \(k\) 个位置分成 \(c\) 组的方案数(即第二类斯特林数)。

枚举 \(c\) ,累加答案即可。

时间复杂度 \(O(k^2+tk)\) 。

posted @ 2026-11-04 19:25  wlhao  阅读(4)  评论(0)    收藏  举报