QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 2048 MB Total points: 100

#8688. 四張一組

Statistics

你正在看一群孩子開心地玩一場友善的 Quartets 遊戲。某個時刻,你開始懷疑其中有些孩子可能在作弊。孩子們自己似乎一點也不在意;恰恰相反,這反而讓他們玩得更開心,尤其是有人作弊被抓到的時候。身為程式設計師,你立刻開始思考如何只靠觀察他們的遊戲來偵測作弊。

Quartets 是一種四人紙牌遊戲,使用一副 $32$ 張的牌,分成 $8$ 組,每組 $4$ 張。實際的紙牌通常有具教育意義的圖片,讓玩家不僅認識個別事物,也學習其分類。例如,牌上可能畫著動物,而各組分別對應不同的動物類別(哺乳類、爬蟲類等)。

problem_8688_c012c73f8edd38ed2a0cf5aef1ad487e.jpg

同組的四張牌,出自 Wilhelm Busch 的德國 Quartets 牌組,經由 Wikimedia Commons 取得,屬於公有領域。

遊戲開始時,每位玩家獲發 $8$ 張牌,由玩家 $1$ 開始回合。每個回合中,玩家向另一位玩家詢問是否持有某張特定的牌。如果被詢問者有那張牌,就必須將牌交給詢問者;詢問者繼續自己的回合,向任意一位玩家索取另一張牌。如果被詢問者沒有那張牌,詢問者的回合結束,改由被詢問者開始回合。一條重要規則是:詢問者必須已經持有至少一張與所索取的牌同組的牌。

如果玩家在自己的回合中持有完整的一組牌(「四張一組」),就可以將這組牌展示給其他玩家,放到一旁,並獲得一分。這四張牌將永久移出本場遊戲。如果任何時刻某位玩家手中沒有牌,該玩家就離開遊戲。如果當時正是其回合,則按照玩家 $1$-$2$-$3$-$4$-$1$-$\ldots$ 的順序,輪到下一位仍有牌的玩家。如果所有玩家都沒有牌,遊戲結束,得分最高的玩家獲勝。

玩家不能索取已經移出遊戲的牌,也不能向已離開遊戲的玩家索取牌。

在 Quartets 遊戲中,有兩種情況可能構成作弊,都是玩家謊稱自己持有(或不持有)某張牌。具體而言,下列情況屬於作弊:

  • 玩家沒有某組的任何牌,卻索取該組的一張牌;或

  • 被詢問的玩家明明持有所索取的牌,卻聲稱沒有。

不言而喻,作弊往往稍後才會被發現。理論上,細心的對手最終能發現任何作弊,因為所有牌最終都會在遊戲結束前的某個時刻公開。

注意,索取一張被詢問者絕不可能持有的牌(例如該牌就在詢問者自己手中),雖然不是聰明的做法,但這個行為本身並不算作弊。

輸入格式

輸入第一行包含一個整數 $n$($1 \le n \le 1000$),表示一場 Quartets 遊戲從開始起連續進行的動作數量。接下來 $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 \ne y$)是表示玩家的整數,$s$($1 \le s \le 8$)是一個一位數整數,對應某一組牌,而 $k \in \{\mathrm{A},\mathrm{B},\mathrm{C},\mathrm{D}\}$ 是用來區分同組四張牌的字元。因此,牌 $sk$ 的標籤為 1A、1B、1C、1D、2A、2B、…、8C、8D。第一個數字相同的四張牌構成一組。

給定的序列描述四位玩家進行的一場有效遊戲。也就是說,除了上述兩種可能的作弊方式之外,所有動作都符合全部規則。

輸出格式

如果存在一種可能的初始牌分配,使動作序列對應一場所有玩家都遵守規則的遊戲(可能只是一部分),輸出 yes。否則輸出 no,然後另起一行,輸出第一個在其執行後可以確定必定有玩家作弊的動作編號。動作從 $1$ 開始依序編號,將完整牌組放到一旁的動作也計算在內。

範例

輸入格式 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

說明

玩家 $1$ 和 $2$ 都聲稱沒有 3C,而且兩人都沒有 3A 或 3D。因此,其中一人要麼謊稱沒有 3C,要麼在沒有 3B(第 $3$ 組唯一剩下的牌)的情況下索取了 3C。

輸入格式 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.