CF2119D Token Removing
题目描述
[r-906 & 初音未来 - All I Can See Is You](https://www.youtube.com/watch?v=xv7hJ32xK94)
定义一个整数序列 $a$ 是合法的,当且仅当对于所有 $1 \le i \le n$,都有 $0 \le a_i \le i$。
定义一个长度为 $n$ 的合法序列 $a$ 的权值 $f(a)$ 如下:
- 初始时,在数轴的闭区间 $[1, n]$ 上的每个整数点各放置一个标记。
- 依次进行 $n$ 次操作。在第 $i$ 次操作时,如果 $a_i \ne 0$,则从闭区间 $[a_i, i]$ 内尚未被移除的标记中移除一个;否则,不进行任何操作。
- $f(a)$ 表示移除标记的方案数。如果存在某个 $t$,使得两种方案在第 $t$ 次操作时移除的标记位置不同,则认为这两种方案不同。
例如,$f([0, 2, 1]) = 2$,因为可以依次移除 $2, 1$ 或 $2, 3$ 位置的标记。
JT 给你两个整数 $n, m$,请你求出所有长度为 $n$ 的合法序列的权值之和,即所有 $(n + 1)!$ 个合法序列的 $f(a)$ 之和。由于答案可能过大,请输出其对 $m$ 取模的结果。
输入格式
每组测试数据包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 1000$),表示测试用例的数量。
接下来每组测试用例一行,包含两个整数 $n$ 和 $m$($1 \le n \le 5000, 10^8 \le m \le 1.01 \cdot 10^9$),分别表示合法序列的长度和取模的数。
保证所有测试用例的 $n^2$ 之和不超过 $2.5 \cdot 10^7$。
输出格式
对于每个测试用例,输出一个整数,表示所有 $(n + 1)!$ 个长度为 $n$ 的合法序列的权值之和,对 $m$ 取模后的结果。
说明/提示
在第一个测试用例中,合法序列为 $[0]$ 和 $[1]$,答案为 $f([0]) + f([1]) = 1 + 1 = 2$。
在第二个测试用例中,合法序列为 $[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2]$。其中 $[0, 1]$ 的权值为 $2$,其余均为 $1$,所以答案为 $5 \times 1 + 1 \times 2 = 7$。
由 ChatGPT 4.1 翻译