QOJ.ac

QOJ

Límite de tiempo: 1 s Límite de memoria: 512 MB Puntuación total: 50

#11424. 悖论

Estadísticas

在一个满月的夜晚,当时钟敲响午夜,五个朋友发现自己准备玩一场像那个夜晚一样神秘的游戏。

他们围坐成一个圆圈,按顺时针顺序排列:Igor、Lea、Marino、Sonja 和 Viktor。游戏包含 $N$ 个回合。第一回合由 Sonja 开始,后续每个回合由上一回合的获胜者开始。

每个玩家手中持有 $N$ 张牌。所有牌都是无色的,上面印有 1 到 9 之间的自然数。当玩家出牌时,他们会为该牌选择一种颜色。他们可以选择四种颜色(红、蓝、黄、绿)中的一种,前提是该牌(数字与颜色的组合)此前尚未在游戏中被出过。在下文中,例如“出一张蓝牌”指的是出牌并声明其为蓝色的过程。

在每一回合中,玩家按顺时针顺序每人出一张牌,直到轮到该回合的起始玩家,即直到每位玩家都出了一张牌。该回合出的第一张牌决定了所谓的“回合颜色”,后续所有玩家都必须出该颜色的牌。如果任何玩家未能出当前回合颜色的牌,则假定该玩家手中没有该颜色的牌——并且在游戏的剩余部分中,禁止该玩家出该颜色的牌。

每回合的获胜者是: 出红色牌且数字最大的那个人。 如果没有出红色牌,则为出该回合颜色且数字最大的人。

有时,玩家会做出不该做的动作:要么出了一张已经出过的牌,要么出了一种他们之前声明自己不再拥有的颜色的牌。这种出牌被称为“悖论”(克罗地亚语:“paradoks”)。当悖论发生时,该次出牌在计算回合获胜者和后续游戏时会被完全忽略。例如,如果一张牌第一次被出时就构成了悖论,那么在游戏的剩余部分中,它被视为尚未被出过。保证每回合的第一个玩家在该回合中永远不会制造悖论。

我们的主角们已经很久没有见面,也没有密切关注游戏,所以他们请求你的帮助。编写一个程序,按回合顺序输出已出的牌,统计发生了多少次悖论,并按发生顺序将它们列出。对于每个悖论,打印它发生的轮次以及导致该悖论的玩家姓名。

输入格式

输入的第一行包含一个自然数 $N$ ($1 \le N \le 10$),表示回合数。

接下来的 $N$ 行输入中,每行有 5 个单词,每个单词 2 个字符长,表示该回合中出的牌,按出牌顺序排列。(注意:每回合的第一个玩家不一定是同一个。)

每个单词的第一个字符表示玩家所出牌的颜色,将是以下字母之一:'C' - 红色,'P' - 蓝色,'Y' - 黄色,'Z' - 绿色。每个单词的第二个字符将是 1 到 9 之间的自然数(包含 1 和 9),表示牌上的数字。

例如,单词 'Y5' 表示一张数字为 5 的黄色牌。

输出格式

打印一个数字 $a$,表示发生的悖论总数。

在接下来的 $a$ 行中,对于每个悖论,打印发生的回合数和导致该悖论的玩家姓名(大写字母)。

悖论应按其发生的顺序打印。

子任务

子任务 分值 约束
1 10 Sonja 将赢得所有回合,且所有悖论均由重复出牌引起。
2 10 所有发生的悖论均由重复出牌引起。
3 30 无额外约束。

样例

输入 1

4
Y5 Z3 Y6 C2 Y1
Z4 Z7 Z2 Y2 P3
Z6 Z7 Z1 Y2 C2
P6 P8 P8 Z7 Y9

输出 1

6
2 VIKTOR
3 SONJA
3 LEA
4 VIKTOR
4 IGOR
4 LEA

输入 2

3
P1 Y9 Z5 Y1 Z5
P5 Y7 Z3 Y8 P1
C6 Y8 P5 Z1 Z8

输出 2

4
1 MARINO
2 MARINO
3 VIKTOR
3 IGOR

输入 3

1
Y4 P9 Y8 Z5 Z3

输出 3

0

说明

第一个样例的说明: 游戏过程如下图所示(在下一页)。

在第 1 回合中,Viktor 和 Lea 没有出黄牌(回合颜色),因此假定他们手中没有剩余的黄牌,并且在游戏的剩余部分中被禁止声明任何牌为黄色。这就是 Viktor 在第 2 回合和 Lea 在最后一回合产生悖论的原因。

注意:在第 2 回合中,由于悖论,Viktor 的动作被忽略,我们不会得出任何进一步的结论。此外,牌 Y2 不被视为已出,这就是为什么 Igor 在第 3 回合出该牌时没有产生悖论。

第 3 回合和第 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.