题目名称 549. [HAOI 2011]问题C
输入输出 c.in/out
难度等级 ★★★
时间限制 5000 ms (5 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatar王者自由 于2011-04-27加入
开放分组 全部用户
提交状态
分类标签
HAOI 动态规划
分享题解
通过:45, 提交:84, 通过率:53.57%
Gravatarstdafx.h 100 2.060 s 1.76 MiB C++
Gravatarmikumikumi 100 2.085 s 1.78 MiB C++
Gravatar神利·代目 100 2.104 s 1.76 MiB C++
Gravatar馒头 100 2.106 s 2.76 MiB C++
Gravatar/k 100 2.115 s 1.78 MiB C++
GravatarDijkstra 100 2.180 s 1.70 MiB C++
Gravatar了反取字名我擦 100 2.196 s 1.67 MiB C++
Gravatar<蒟蒻>我要喝豆奶 100 2.235 s 2.21 MiB C++
Gravatarvampire 100 2.301 s 1.78 MiB C++
GravatarKCkwok 100 2.357 s 1.78 MiB C++
关于 问题C 的近10条评论(全部评论)
...
Gravatarsxysxy
2017-02-24 07:57 1楼

549. [HAOI 2011]问题C

★★★   输入文件:c.in   输出文件:c.out   简单对比
时间限制:5 s   内存限制:256 MiB

【题目描述】

给 $n$ 个人安排座位,先给每个人一个 $1 \sim n$ 的编号,设第 $i$ 个人的编号为 $a_i$(不同人的编号可以相同)。


接着从第一个人开始,大家依次入座,第 $i$ 个人来了以后尝试坐到 $a_i$,如果 $a_i$ 被占据了,就尝试 $a_i+1$,$a_i+1$ 也被占据了的话就尝试 $a_i+2$……,如果一直尝试到第 $n$ 个都不行,该安排方案就不合法。


然而有 $m$ 个人的编号已经确定(他们或许贿赂了你的上司...),你只能安排剩下的人的编号,求有多少种合法的安排方案。


由于答案可能很大,只需输出其除以 $M$ 后的余数即可。

【输入格式】

第一行一个整数 $T$,表示数据组数。

对于每组数据,第一行有三个整数,分别表示 $n$、$m$、$M$。

若 $m$ 不为 $0$,则接下来一行有 $m$ 对整数,$p_1$、$q_1$,$p_2$、$q_2$,..., $p_m$、$q_m$,其中第 $i$ 对整数 $p_i$、$q_i$ 表示第 $p_i$ 个人的编号必须为 $q_i$。

【输出格式】

对于每组数据输出一行,若是有解则输出 `$YES$`,后跟一个整数表示方案数 $\bmod M$,注意,`$YES$` 和数之间只有一个空格,否则输出 `$NO$`。

【样例输入】

2
4 3 10
1 2 2 1 3 1
10 3 8882
7 9 2 9 5 10

【样例输出】

YES 4
NO

【数据规模与约定】

对于 $30\%$ 的数据满足:$1 ≤ n ≤ 10$;

对于 $100\%$ 的数据,保证

- $1 \leq T \leq 10$。

- $1 \leq n \leq 300$, $0 \leq m \leq n$, $2 \leq M \leq 10^9$。

- $1 \leq p_i$、$q_i \leq n$。

- $p_i$ 互不相同。