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 翻译