#HK3967. 「JOISC 2023 Day1」JOI 国的节日 2

「JOISC 2023 Day1」JOI 国的节日 2

题目描述

题目译自 JOISC 2023 Day1 T2 「JOI 国のお祭り事情 2 / Festivals in JOI Kingdom 2

在 JOI 国,每年会举行一次全国性的节日庆典。在节日期间,共会进行 NN 场活动。每场活动的时间计划表已经确定,这 NN 个活动的计划表用长为 NN 的序列 a,ba,b 表示,序列满足以下条件:

  • 112N2N 的整数(包含两端)在序列 a,ba,b 中出现且只出现一次
  • ai<bi (1iN)a_i<b_i\ (1\le i\le N)
  • ai<ai+1 (1iN1)a_i<a_{i+1}\ (1\le i\le N-1)

ii 个活动会在节日开始之后的 aia_i 分钟时开始,在节日开始之后的 bib_i 分钟结束。

节日庆典的参与者可以参加任意活动。然而,参与者不允许参加两个时间重叠的活动。注意活动开始和结束之间两两不同。

JOI 君想要参加尽可能多的活动。直到去年,他都使用如下程序来选择他将参与的活动:

  • 对于 i=1,2,,Ni=1,2,\ldots,N,按此顺序进行如下操作。

    如果第 ii 个活动的时间不与他已经决定参加的活动时间重叠,那么他就会参加第 ii 个活动。否则他不会参加第 ii 个活动。

然而,在学习计算机科学后,JOI 君注意到上述算法不一定最大化 JOI 君参加的活动数。从今年开始,JOI 君会使用一个改进的算法,使用这个改进的算法,JOI 君可以最大化他所参加的活动数。

JOI 君想知道改进的算法在多少种情况下会输出更大的参加活动数。

给定 NN 和一个大质数 PP,写一个程序计算有多少对描述时间安排且长为 NN 的序列 a,ba,b,满足改进的算法会输出更大的参加活动数。因为答案可能很大,你的程序只需输出这个值对 PP 取模后的值即可。

输入格式

第一行输入两个整数 N,PN,P

输出格式

输出一行一个整数表示答案,因为答案可能很大,你的程序只需输出这个值对 PP 取模后的值即可。

3 100000007

2

例如,考虑当 a=(1,2,4),b=(6,3,5)a=(1,2,4),b=(6,3,5) 的情况。如果 JOI 君使用直到去年都在用的算法,他只会参加第一个活动。如果他用了正确的最大化活动参加数的算法,他会参加第二和第三个活动。因此,他将参加两个活动。这种情况下,改进的算法将输出更大的活动参加数。

下面是改进算法将输出更大的活动参加数的序列 a,ba,b

  • a=(1,2,4),b=(6,3,5)a=(1,2,4),b=(6,3,5)
  • a=(1,2,4),b=(5,3,6)a=(1,2,4),b=(5,3,6)

由于 22100 000 007100\ 000\ 00722,因此输出 22

这组样例满足所有子任务的限制。

4 100000007

28

2828 对序列 a,ba,b​ 满足条件,由于 2828100 000 007100\ 000\ 0072828,因此输出 2828

这组样例满足所有子任务的限制。

15 999999937

935834920

5 295 044 602 247 1485\ 295\ 044\ 602\ 247\ 148 对序列 a,ba,b 满足条件,由于 5 295 044 602 247 1485\ 295\ 044\ 602\ 247\ 148999 999 937999\ 999\ 937935 834 920935\ 834\ 920,因此输出 935 834 920935\ 834\ 920

这组样例满足子任务 3,4,5,63,4,5,6 的限制。

数据范围与提示

对于所有输入数据,满足:

  • 1N20 0001\le N\le 20\ 000
  • 108<P<10910^8<P<10^9
  • PP 是一个质数

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 N5N\le 5 55
22 N8N\le 8
33 N30N\le 30 2727
44 N300N\le 300 1414
55 N3 000N\le 3\ 000 3636
66 无附加限制 1313