|
||||||||||
地牢谜题:三个怪人Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 24 Accepted Submission(s): 8 Problem Description 好的,现在你身处一个房间内。在你的面前有 $3$ 个宝箱以及 $3$ 个怪人。其中只有一个宝箱是真的宝箱,其他都是假的,你必须一次打开真宝箱。房间里的每个怪人会告诉你以下两种消息之一,但不一定是实话: - 有 $k\ (1\le k \le 3)$ 个怪人会说实话。 - 真宝箱是第 $i\ (1 \le i \le 3)$ 个宝箱。 这似乎是地牢谜题中最困难的问题之一,因为玩家总是要花时间去考虑究竟谁在说实话。但更为困难的是,作为谜题的设计者,如何设计出合法的谜题。 现在假设有 $n$ 个**不同**的宝箱以及 $m$ 个**相同**的怪人,询问有多少种本质不同的合法谜题。一个谜题合法,当且仅当**只有一个真宝箱作为前提条件**时,玩家能够通过怪人们的话唯一确定真的宝箱。两个谜题本质不同,当且仅当满足下面两个条件之一: - 存在 $1 \le k \le m$,说"有 $k$ 个怪人会说实话"的怪人数量不同。 - 存在 $1 \le i \le n$,说"真宝箱是第 $i$ 个宝箱"的怪人数量不同。 由于答案可能很大,请输出其对某质数 $P$ 取模的结果。 Input 输入第一行包含一个整数 $T$ ($1 \le T \le 10$),表示该组数据的测试点组数。 对于每组测试点, 输入第一行包含三个整数 $n$, $m$, $P$ ($1 \le n,m \le 200$, $10^8 \le P < 10^9$),表示宝箱的数量,怪人的数量,以及取模的质数。 Output 对于每组测试点,输出一行一个整数,表示合法谜题的数量对 $P$ 取模的结果。 Sample Input
Sample Output
Hint 对于第一组测试点,合法的谜题有: - 1 个人说第一个宝箱是真的,2 个人说有一个人说实话。这样能够确定第二个宝箱是真的。 - 2 个人说第一个宝箱是真的,1 个人说有两个人说实话。这样能够确定第二个宝箱是真的。 - 1 个人说第一个宝箱是真的,1 个人说有一个人说实话,1 个人说有三个人说实话。这样能够确定第二个宝箱是真的。 - 1个人说第二个宝箱是真的,2 个人说有一个人说实话。这样能够确定第一个宝箱是真的。 - 2个人说第二个宝箱是真的,1 个人说有两个人说实话。这样能够确定第一个宝箱是真的。 - 1个人说第二个宝箱是真的,1 个人说有一个人说实话,1 个人说有三个人说实话。这样能够确定第一个宝箱是真的。 对于第二组测试点,唯一的人一旦指定了真宝箱,那么就可以确定那就是真的宝箱。 对于第三组测试点,即使唯一的人指定了真宝箱,由于存在他在说谎且真宝箱为另一个宝箱的情况,所以不存在合法的谜题。 Source | ||||||||||
|