QOJ.ac

QOJ

Límite de tiempo: 10 s Límite de memoria: 1024 MB Puntuación total: 18

#6000. 令人困惑的对决

Estadísticas

你需要组织一场“石头、剪刀、布”锦标赛。锦标赛采用单败淘汰制,共进行 $N$ 轮,共有 $2^N$ 名选手参赛。

起初,选手们按你指定的某种顺序从左到右排成一列。在每一轮中,队列中第 1 位和第 2 位选手(从左侧开始计数)进行比赛,第 3 位和第 4 位选手(如果存在)进行比赛,以此类推;所有这些比赛同时进行。比赛的胜者将留在队列中,保持原有的相对顺序,而败者离开队列回家。接着开始新的一轮。这一过程将持续到队列中只剩下一名选手为止;该选手即被宣布为冠军。

在每一场“石头、剪刀、布”比赛中,两名选手秘密地从“石头”(Rock)、“剪刀”(Scissors)或“布”(Paper)中选择一种,然后比较他们的选择。石头胜剪刀,剪刀胜布,布胜石头。如果一方的选择胜过另一方,则该选手获胜,比赛结束。然而,如果选手做出相同的选择,则为平局,他们必须重新选择并继续比赛,直到分出胜负。

你知道今年的选手们很固执,且缺乏策略。每个人都有一个偏好的出招,无论对手如何,他们在每一场比赛中都只会出该招。因此,如果两名出招相同的选手对决,他们将不断平局,比赛将永远进行下去!如果发生这种情况,锦标赛将永远无法结束,你也会沦为笑柄。

今年,有 $R$ 名选手偏好石头, $P$ 名选手偏好布, $S$ 名选手偏好剪刀。已知这些信息,你希望创建一个队列,保证锦标赛能够顺利完成并产生唯一的冠军——也就是说,比赛中永远不会出现平局。你的老板要求你列出所有满足条件的队列(按从左到右的顺序书写,用 $R$、$P$ 和 $S$ 分别代表偏好石头、布和剪刀的选手),并将该列表按字母顺序排列。

你知道老板会懒惰地选择列表中的第一个队列;那会是什么?或者你必须告诉老板,要防止平局是不可能的(IMPOSSIBLE)?

输入格式

输入的第一行给出测试用例的数量 $T$。接下来有 $T$ 行,每行代表一个测试用例。每个测试用例包含四个整数: $N$、$R$、$P$ 和 $S$,如上所述。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 要么是 IMPOSSIBLE,要么是一个长度为 $2^N$ 的字符串,代表解决该问题的字母顺序最早的初始队列。队列中的每个字符必须是 $R$、$P$ 或 $S$,且必须包含 $R$ 个 $R$,$P$ 个 $P$ 和 $S$ 个 $S$。

数据范围

$R + P + S = 2^N$ $0 \le R \le 2^N$ $0 \le P \le 2^N$ $0 \le S \le 2^N$

小型数据集(测试集 1 - 可见) $1 \le T \le 25$ $1 \le N \le 3$

大型数据集(测试集 2 - 隐藏) $1 \le T \le 75$ $1 \le N \le 12$

样例

样例输入 1

4
1 1 1 0
1 2 0 0
2 1 1 2
2 2 0 2

样例输出 1

Case #1: PR
Case #2: IMPOSSIBLE
Case #3: PSRS
Case #4: IMPOSSIBLE

说明

在样例 1 中,只有两名选手,锦标赛将进行一轮。两人排队的顺序无关紧要;出布的选手将击败出石头的选手。你将给老板提供按字母顺序排列的列表 PRRP,其中第一个元素是 PR

在样例 2 中,仅有的两名选手都出石头,因此平局不可避免。

在样例 3 中,有四名选手,锦标赛将进行两轮。在第一轮中,第一位选手(布)将输给第二位选手(剪刀),第三位选手(石头)将击败第四位选手(剪刀)。第二轮的队列将是 PR,第一位剩余选手(布)将击败另一位剩余选手(石头),因此锦标赛将以产生冠军且无平局结束。

以下是样例 3 的锦标赛示意图:

其他队列如 PSSR 也会出现在你给老板的列表中,但 PSRS 在字母顺序上是最早的。

在样例 4 中,要使第一轮没有平局,唯一的组织方式是安排两场比赛,每场比赛各有一名出石头的选手和一名出剪刀的选手。但这两场比赛的胜者都会是石头选手,当这两名胜者在下一轮相遇时,就会出现平局。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.