QOJ.ac

QOJ

Süre Sınırı: 2 s Bellek Sınırı: 2048 MB Toplam puan: 100

#8688. 四張一組

İstatistikler

你正睇住一班小朋友開開心心咁玩一場友善嘅 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.