AT_agc071_e [AGC071E] Procrastinate Counter
题目描述
[problemUrl]: https://atcoder.jp/contests/agc071/tasks/agc071_e
对于排列 $P = (P_1, P_2, \dots, P_N)$(即 $1, 2, \dots, N$ 的排列),我们定义长度为 $N$ 的整数序列 $f(P)$ 如下:
- 初始化整数序列 $X$ 为 $X = (P_1, P_2, \dots, P_N)$,并持续对 $X$ 进行以下操作,直到 $X$ 成为单调递增序列。可以证明,对于任意排列 $P$,$X$ 经过有限次操作后一定会变为单调递增序列。
- 找到满足 $X_i > X_{i+1}$ 的最小下标 $i$($1 \leq i < N$),记为 $k$。将 $X$ 的第 $k$ 项移动到末尾。更准确地说,将 $X$ 替换为 $(X_1, X_2, \dots, X_{k-1}, X_{k+1}, X_{k+2}, \dots, X_N, X_{k})$。
记整数 $x$ 在整个操作过程中被移动到末尾的次数为 $C_x$,则定义 $f(P) = (C_1, C_2, \dots, C_N)$。
请计算所有可能的 $f(P)$ 的种类数对素数 $M$ 取模后的结果。
输入格式
输入从标准输入按以下格式给出:
> $N$ $M$
输出格式
输出答案。
说明/提示
### 约束条件
- $1 \leq N \leq 500$
- $10^8 \leq M \leq 10^9$
- $M$ 是素数
- 输入中的所有值均为整数
### 样例解释 #1
例如,当 $P = (1, 4, 3, 2)$ 时,初始化的 $X = (1, 4, 3, 2)$,操作过程如下:
1. 由于 $X_1 \leq X_2$ 但 $X_2 > X_3$,将 $X_2 = 4$ 移动到末尾,$X$ 变为 $(1, 3, 2, 4)$。
2. 将 $X_2 = 3$ 移动到末尾,$X$ 变为 $(1, 2, 4, 3)$。
3. 将 $X_3 = 4$ 移动到末尾,$X$ 变为 $(1, 2, 3, 4)$。
此时,元素 $1, 2, 3, 4$ 被移动到末尾的次数分别为 $0, 0, 1, 2$ 次,因此 $f(P) = (0, 0, 1, 2)$。
翻译由 DeepSeek R1 完成