CF2222H Counting Sort?
题目描述
我想在决定性的时刻冲动地结束这段人生,而不是生活在别人为我铺设的轨道上。
Kashii Moimi & Kaai Yuki, [The Decisive Hour](https://www.youtube.com/watch?v=CM3Op5bRC4s)
对于一个数组 $[b_1, b_2, \ldots, b_m]$,其中 $0 \le b_i \le m$,定义 $f(b)$ 为数组 $[c_1, c_2, \ldots, c_m]$,其中 $c_i$ 表示 $b$ 数组中数字 $i$ 出现的次数。
对于数组 $[b_1, b_2, \ldots, b_m]$,其中 $0 \le b_i \le m$,定义数组的值 $g(b)$ 如下:
- 初始时,集合 $S$ 为空。设置数组 $d$ 初始等于 $b$。
- 然后,操作 $100^{100}$ 次:每次把 $d$ 插入 $S$,然后令 $d \gets f(d)$。
- $g(b)$ 是 $S$ 中不同数组的个数,即这些操作后 $S$ 包含的不同数组的数量。
现在,给你两个整数 $n$ 和 $k$,以及一个数组 $[r_1, r_2, \ldots, r_n]$。对于每个 $1\le p\le k$,请统计有多少个数组 $[a_1, a_2, \ldots, a_n]$ 满足 $0 \le a_i \le r_i$ 且 $g(a) = p$。由于答案可能很大,请对 $998\,244\,353$ 取模输出。
输入格式
每个测试点包含多组测试数据。第一行是测试数据的组数 $t$($1 \le t \le 1000$)。
每组测试数据的第一行包含两个整数 $n$ 和 $k$($1 \le n \le 50$,$1 \le k \le 1000$)。
第二行包含 $n$ 个整数 $r_1, r_2, \ldots, r_n$($0 \le r_i \le n$)。
保证所有测试数据中 $\sum n^3 \le 50^3$。
输出格式
对于每组测试数据,输出 $k$ 个整数,分别表示满足 $g(a) = 1,2,\ldots,k$ 的数组 $[a_1, a_2, \ldots, a_n]$ 的个数。
请对 $998\,244\,353$ 取模输出。
说明/提示
在第一个测试点中,$g([0, 0]) = g([1, 0]) = 1$,$g([0, 1]) = 2$,$g([2, 0]) = g([0, 2]) = 3$,$g([1, 1]) = g([2, 2]) = 4$,$g([1, 2]) = g([2, 1]) = 5$。
在第二个测试点中,
$$
\begin{aligned}
f([4, 5, 1, 4, 5]) &= [1, 0, 0, 2, 2] \\
f([1, 0, 0, 2, 2]) &= [1, 2, 0, 0, 0] \\
f([1, 2, 0, 0, 0]) &= [1, 1, 0, 0, 0] \\
f([1, 1, 0, 0, 0]) &= [2, 0, 0, 0, 0] \\
f([2, 0, 0, 0, 0]) &= [0, 1, 0, 0, 0] \\
f([0, 1, 0, 0, 0]) &= [1, 0, 0, 0, 0] \\
f([1, 0, 0, 0, 0]) &= [1, 0, 0, 0, 0] \\
\end{aligned}
$$
所以 $g([4, 5, 1, 4, 5]) = 7$。
由 ChatGPT 5 翻译