AT_agc071_e.[AGC071E] Procrastinate Counter

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

对于排列 P=(P1,P2,…,PN)P = (P_1, P_2, \dots, P_N)(即 1,2,…,N1, 2, \dots, N 的排列),我们定义长度为 NN 的整数序列 f(P)f(P) 如下:

  • 初始化整数序列 XX 为 X=(P1,P2,…,PN)X = (P_1, P_2, \dots, P_N),并持续对 XX 进行以下操作,直到 XX 成为单调递增序列。可以证明,对于任意排列 PP,XX 经过有限次操作后一定会变为单调递增序列。

    • 找到满足 Xi>Xi+1X_i > X_{i+1} 的最小下标 ii(1≤i<N1 \leq i < N),记为 kk。将 XX 的第 kk 项移动到末尾。更准确地说,将 XX 替换为 (X1,X2,…,Xk−1,Xk+1,Xk+2,…,XN,Xk)(X_1, X_2, \dots, X_{k-1}, X_{k+1}, X_{k+2}, \dots, X_N, X_{k})。

    记整数 xx 在整个操作过程中被移动到末尾的次数为 CxC_x,则定义 f(P)=(C1,C2,…,CN)f(P) = (C_1, C_2, \dots, C_N)。

请计算所有可能的 f(P)f(P) 的种类数对素数 MM 取模后的结果。

输入格式

输入从标准输入按以下格式给出:

NN MM

输出格式

输出答案。

输入输出样例

  • 输入#1

    4 998244353

    输出#1

    8
  • 输入#2

    71 998244353

    输出#2

    473972314
  • 输入#3

    300 923223991

    输出#3

    333532467

说明/提示

约束条件

  • 1≤N≤5001 \leq N \leq 500
  • 108≤M≤10910^8 \leq M \leq 10^9
  • MM 是素数
  • 输入中的所有值均为整数

样例解释 #1

例如,当 P=(1,4,3,2)P = (1, 4, 3, 2) 时,初始化的 X=(1,4,3,2)X = (1, 4, 3, 2),操作过程如下:

  1. 由于 X1≤X2X_1 \leq X_2 但 X2>X3X_2 > X_3,将 X2=4X_2 = 4 移动到末尾,XX 变为 (1,3,2,4)(1, 3, 2, 4)。
  2. 将 X2=3X_2 = 3 移动到末尾,XX 变为 (1,2,4,3)(1, 2, 4, 3)。
  3. 将 X3=4X_3 = 4 移动到末尾,XX 变为 (1,2,3,4)(1, 2, 3, 4)。
    此时,元素 1,2,3,41, 2, 3, 4 被移动到末尾的次数分别为 0,0,1,20, 0, 1, 2 次,因此 f(P)=(0,0,1,2)f(P) = (0, 0, 1, 2)。

翻译由 DeepSeek R1 完成

输入解题思路,AI测评打分。不知道怎么写?

首页