QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 2048 MB 總分: 100

#8688. 四重奏

统计

你正在观看一群孩子玩一种名为“四重奏”(Quartets)的友好纸牌游戏,玩得很开心。某一刻,你开始怀疑其中一些孩子可能在作弊。孩子们自己对此完全不在意。恰恰相反,这给他们带来了更多的乐趣,尤其是当有人被抓到作弊时。作为一名程序员,你立刻开始思考如何通过观察他们的游戏来检测作弊。

“四重奏”是一款 4 人纸牌游戏,使用一副 32 张牌的牌组,分为 8 个系列,每个系列 4 张牌。实际的牌通常包含教育性的图片,这有助于玩家不仅学习单个物体,还能学习它们的分类。例如,牌上可能显示动物,而系列则对应各种动物类别(哺乳动物、爬行动物等)。

在“四重奏”游戏开始时,每位玩家发 8 张牌,由玩家 1 开始回合。在每一回合中,玩家向另一位玩家询问是否拥有某张特定的牌。如果被询问的玩家拥有该牌,他们必须将其交给请求者,请求者继续他们的回合,向任意玩家询问另一张牌。如果被询问的玩家没有请求的牌,请求者失去回合,被询问的玩家开始他们的回合。一条重要的规则是,请求者必须已经拥有与所询问的牌属于同一系列的至少一张牌。

如果在回合中,玩家手中凑齐了一整套(“四重奏”),玩家可以将该四重奏展示给其他玩家,将其放在一边并获得一分。该四重奏的四张牌将永久从当前游戏中移除。如果某位玩家在任何时候手中没有牌了,该玩家离开游戏。如果当时轮到该玩家的回合,回合将按顺序(玩家 1-2-3-4-1-...)传递给下一位仍有牌的玩家。如果没有玩家有牌,游戏结束,得分最高的玩家被宣布为获胜者。

玩家不允许询问已被移除出游戏的牌,也不能向已经离开游戏的玩家询问牌。

在“四重奏”游戏中,作弊可能发生在两种情况下,即玩家虚假声称拥有(或没有)某张牌。具体来说,如果出现以下情况,则视为作弊:

  • 玩家在没有对应系列任何牌的情况下询问某张牌,或者
  • 被询问的玩家声称没有请求的牌,但实际上他们拥有该牌。

不用说,作弊往往是在事后才被发现的。理论上,警惕的对手最终可以发现任何作弊行为,因为所有牌在游戏结束前的某个时刻最终都会被揭示。

注意,询问被询问者不可能拥有的牌(例如,因为请求者自己手中就有该牌)虽然不是明智之举,但本身并不被视为作弊。

输入格式

输入的第一行包含一个整数 $n$ ($1 \le n \le 1000$),表示一场“四重奏”游戏中从游戏开始算起的连续动作次数。接下来的 $n$ 行,每行包含一个动作的描述。每个动作由一行描述,可能是以下情况之一:

  • $x$ A $y$ $sk$ yes — 玩家 $x$ 向玩家 $y$ 询问牌 $sk$,玩家 $y$ 将该牌交给玩家 $x$;
  • $x$ A $y$ $sk$ no — 玩家 $x$ 向玩家 $y$ 询问牌 $sk$,玩家 $y$ 声称没有该牌,并开始他们的回合;
  • $x$ Q $s$ — 玩家 $x$ 将四重奏 $s$ 放在一边。

在所有动作中,$x$ 和 $y$ ($1 \le x, y \le 4, x \neq y$) 是表示玩家的整数,$s$ ($1 \le s \le 8$) 是对应于其中一个系列/四重奏的单位数整数,$k \in \{A, B, C, D\}$ 是标识一个系列中四张牌的字符。因此,牌 $sk$ 被标记为 1A, 1B, 1C, 1D, 2A, 2B, ..., 8C, 8D。共享相同首位数字的四张牌组成一个系列。

给定的序列描述了 4 名玩家之间进行的一场有效游戏。也就是说,除了上述提到的两种作弊方式外,所有动作都满足所有规则。

输出格式

如果存在一种可能的初始发牌分布,使得动作序列对应于一场(可能是局部的)且所有玩家都遵循规则的游戏,则输出 yes。否则,输出 no,并紧跟一行,给出确定某位玩家一定作弊后的第一个动作编号。动作从 1 开始顺序编号,放置四重奏的动作也计入在内。

说明

样例 1 中,玩家 1 和玩家 2 都声称没有 3C,且他们两人都没有 3A 或 3D。所以他们中有人要么在没有 3C 上撒了谎,要么在没有 3B(系列 3 中唯一剩下的牌)的情况下询问了 3C。

样例

样例输入 1

4
1 A 2 3C no
2 A 3 3A yes
2 A 4 3D yes
2 A 1 3C no

样例输出 1

no
4

样例输入 2

6
1 A 2 3C no
2 A 3 3A yes
2 A 4 3D yes
2 A 1 3B no
1 A 4 5B yes
1 Q 5

样例输出 2

yes

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.