U509897 [COCI2024/2025 #2] Paradoks

题目描述

一个满月的晚上,当钟敲响午夜时,五个朋友发现自己准备好玩一个和那晚一样神秘的游戏。 他们按照顺时针顺序围坐成一圈: Igor、Lea、Marino、Sonja 和 Viktor。游戏由 $N$ 轮组成。第一轮由 Sonja 开始,随后每轮由上一轮的获胜者开始。 每个玩家手里都拿着 $N$ 张牌。所有的卡片都是无色的,上面有一个 $1$ 到 $9$ 之间的自然数。当玩家玩牌时,他们选择这张牌的颜色。他们可以从四种颜色(红、蓝、黄、绿)中选择一种,前提是这样的卡牌(数字和颜色的组合)尚未在游戏中被玩过。下文中,例如“玩蓝牌”一词,是指玩牌并宣布其为蓝牌的过程。 在每一轮中,按照顺时针顺序,每个人轮流出一张牌,直到轮到开始这一轮的人,即每个队员都出一张牌。第一轮中出的第一张牌决定了所谓的“轮色”(round color),所有后续的玩家都必须出这种颜色的牌。如果任何玩家未能出当前轮色的牌,则假设该玩家手牌中没有这种颜色的牌,并禁止该玩家在剩余的游戏中出这种颜色的牌。 每轮的获胜者是: - 出示红牌号码最高的人。 - 如果没有打出红牌,则打出回合颜色最高的人。 有时候,玩家会做出不该有的举动:要么打出已经出过的牌,要么打出之前宣称不再拥有的颜色的牌。这种出牌方式被称为悖论(在克罗地亚语中称为 paradoks)。当出现悖论时,在计算回合的胜利者和游戏剩余部分时,该回合的出牌将被完全忽略。例如,如果一张牌作为悖论首次出牌,那么在游戏的剩余部分中,这张牌将被视为尚未出牌。可以保证,在回合中,**第一个玩家永远不会打出悖论**。 他们几个人已经很久没有见面了,也没有默契,所以他们请求你的帮助。编写一个程序,按轮次顺序列出已玩过的牌,打印出发生的悖论数量,并按发生顺序列出它们。对于每个悖论,输出发生轮次和导致它的玩家。

输入格式

第一行输入包含一个自然数 $N$,表示轮数。 在接下来的 $N$ 行输入中,有 $5$ 个单词,每个单词 $2$ 个字符长,表示该轮中按出牌顺序出牌的卡片。(注意:每轮的第一位玩家不一定相同。) 每个单词的第一个字符代表玩家所玩牌的颜色,将是以下字母之一:$C$:红色,$P$:蓝色,$Y$:黄色,$Z$:绿色。每个字的第二个字符将是 $1$ 到 $9$ 之间的自然数,代表卡片上的数字。 例如,$\text{Y5}$ 一词代表带有数字 $5$ 的黄牌。

输出格式

输出一个数字 $a$,即发生的悖论数量。 在接下来的 $a$ 行中,对于每个悖论,用大写字母输出轮数和引起它的玩家的名字。悖论应该按出现的顺序打印出来。

说明/提示

【样例解释 #1】 游戏过程如下图所示。 在第一轮比赛中,Viktor 和 Lea 没有打出黄牌(本轮比赛的颜色),因此假设他们手中没有黄牌,并且禁止在比赛结束时宣布任何一张黄牌为黄色。这就是第二轮 Viktor 悖论和最后一轮 Lea 悖论的原因 **注意**:在第二轮中,由于悖论,Viktor 的举动被忽略了,我们没有得出任何进一步的结论。此外,$\text{Y2}$ 牌不被视为已玩,这就是为什么 Igor 在第三轮中玩这张牌不会出现矛盾的原因。 第 $3$ 轮和第 $4$ 轮(除了最后一轮)的所有悖论都是因为玩了一张在游戏早些时候已经玩过的牌。 ![](https://cdn.luogu.com.cn/upload/image_hosting/ljwifpoa.png) 【数据范围】 对于 $100\%$ 的数据,$1\le N\le 10$。 | Substask | 分数 | 约束条件 | | :----------: | :----------: | :----------: | | $0$ | $0$ | 样例 | | $1$ | $10$ | Sonja 将是所有回合的赢家,所有的悖论都会因为重复一张已经打过的牌而发生 | | $2$ | $10$ | 所有出现的悖论都是由于重复已经打过的牌构成的。 | | $3$ | $30$ | 无 |