QOJ.ac

QOJ

Time Limit: 20 s Memory Limit: 1024 MB Total points: 28

#11460. 机器人编程策略

Statistics

经过无数个不眠之夜,你终于教会了机械臂做出“石头剪刀布”游戏所需的手势。现在,你只需要编写程序让它参加即将到来的机器人锦标赛!

在本次锦标赛中,每个机器人使用的程序都是一系列动作,每个动作必须是以下之一:R(代表“石头”)、P(代表“布”)或 S(代表“剪刀”)。布胜过石头且输给剪刀;石头胜过剪刀且输给布;剪刀胜过布且输给石头。

当两个机器人在比赛中对决时,第一个做出获胜动作的机器人获胜。比赛开始时,每个机器人执行其程序的第一个动作。如果两个动作不同,其中一个动作会胜过另一个,从而其中一个机器人赢得比赛。如果动作相同,每个机器人执行其程序的下一个动作,依此类推。

每当机器人执行完其程序并需要下一个动作时,它会回到程序开头。例如,程序为 RSSP 的机器人的第五个动作是 R。如果比赛持续超过一古戈尔($10^{100}$)个动作,裁判将掷硬币决定胜者。

一旦比赛结束,获胜的机器人会重置,因此它对该场比赛没有记忆。在下一场比赛中,它会从程序的第一步开始执行,依此类推。

锦标赛共进行 $K$ 轮,采用单败淘汰制。共有 $N = 2^K$ 个机器人,编号从 $0$ 到 $N - 1$。在第一轮中,机器人 $0$ 与机器人 $1$ 对决,机器人 $2$ 与机器人 $3$ 对决,依此类推,直到机器人 $N - 2$ 和 $N - 1$。这些比赛的负者被淘汰出局。在第二轮中,$0-1$ 比赛的胜者与 $2-3$ 比赛的胜者对决,依此类推。一旦进入第 $K$ 轮,只剩下一场比赛,它决定了锦标赛的总冠军。

所有其他参赛者都非常有信心,他们已经公开了各自机器人的程序。然而,机器人尚未分配编号,因此没有人预先知道他们的对手是谁。在了解所有其他程序的情况下,是否可能编写一个程序,保证无论机器人编号如何分配,都能赢得锦标赛?

输入格式

输入的第一行给出测试用例的数量 $T$;接下来是 $T$ 个测试用例。每个测试用例的第一行包含一个整数 $A$:锦标赛中对手(其他机器人)的数量。接下来有 $A$ 行;第 $i$ 行包含一个由大写字母组成的字符串 $C_i$,代表第 $i$ 个对手机器人的程序。

输出格式

对于每个测试用例,输出一行 Case #x: y。如果存在一个长度在 $1$ 到 $500$ 之间的字符串,能够保证按照上述规则赢得锦标赛,则 $y$ 应为代表该程序的字符串。否则,$y$ 应为大写字母 IMPOSSIBLE

数据范围

$1 \le T \le 100$。 $A = 2^K - 1$,其中 $K \ge 1$ 为某个整数。 $C_i$ 中的每个字符均为 RPS

测试集 1(可见) $1 \le A \le 7$。 $C_i$ 的长度在 $1$ 到 $5$ 之间。

测试集 2(隐藏) $1 \le A \le 255$。 $C_i$ 的长度在 $1$ 到 $500$ 之间。

样例

样例输入 1

3
1
RS
3
R
P
S
7
RS
RS
RS
RS
RS
RS
RS

样例输出 1

Case #1: RSRSRSP
Case #2: IMPOSSIBLE
Case #3: P

说明

注意:尽管在这些样例中所有对手的程序长度相同,但这并非必然。同一个测试用例中的对手可能拥有不同长度的程序。

在样例 1 中,只有一个对手,程序为 RS。我们的答案在一段时间内与对手的动作匹配,而对手会多次循环其程序。当它开始第四次循环时,我们用 P 击败了它。其他有效的解也存在,例如 PRRR

在样例 2 中,有三个对手,程序分别为 RPS。请自行思考为什么该用例的结果是 IMPOSSIBLE

在样例 3 中,所有七个对手都使用相同的程序。例如,使用程序 P 可以保证你获胜。请记住,每个机器人在与新对手进行每场比赛时,都会从其程序的开头开始。

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.