QOJ.ac

QOJ

시간 제한: 2 s 메모리 제한: 2048 MB 총점: 100

#8688. カルテット

통계

あなたは、子供たちが仲良く Quartets で遊んで楽しんでいるのを見ています。あるとき、何人かが不正をしているのではないかと疑い始めました。子供たち自身はまったく気にしていないようです。それどころか、特に誰かの不正が見つかったときには、さらに楽しんでいます。プログラマーであるあなたは、ゲームを観察するだけで不正を検出する方法をすぐに考え始めました。

Quartets は、$32$ 枚のカードを $4$ 枚ずつ $8$ 組に分けたデッキを使う、$4$ 人用のカードゲームです。実際のカードには教育的な絵が描かれることが多く、個々の物だけでなく、その分類も学べます。例えば、カードに動物が描かれ、各組が動物のさまざまな分類(哺乳類、爬虫類など)に対応することがあります。

problem_8688_c012c73f8edd38ed2a0cf5aef1ad487e.jpg

Wilhelm Busch によるドイツの Quartets デッキの同じ組の $4$ 枚。Wikimedia Commons 経由、パブリックドメイン。

ゲームの開始時には各プレイヤーに $8$ 枚のカードが配られ、プレイヤー $1$ の手番から始まります。手番では、別のプレイヤーに特定のカードを持っているか尋ねます。尋ねられたプレイヤーがそのカードを持っていれば、要求したプレイヤーに渡さなければならず、要求したプレイヤーは手番を続けて、任意のプレイヤーに別のカードを要求します。持っていなければ、要求したプレイヤーの手番は終わり、尋ねられたプレイヤーの手番になります。重要なルールとして、要求するプレイヤーは要求するカードと同じ組のカードを少なくとも $1$ 枚すでに持っていなければなりません。

自分の手番中に同じ組の全カード(「カルテット」)を持っていれば、それを他のプレイヤーに見せて脇に置き、$1$ 点を得ることができます。その $4$ 枚は現在のゲームから永久に取り除かれます。いつでも、手持ちのカードがなくなったプレイヤーはゲームから抜けます。そのプレイヤーの手番だった場合、プレイヤー $1$-$2$-$3$-$4$-$1$-$\ldots$ の順で次にカードを持っているプレイヤーへ手番が移ります。誰もカードを持っていなければゲームが終わり、最も得点の高いプレイヤーが勝者になります。

ゲームから取り除かれたカードを要求したり、ゲームから抜けたプレイヤーにカードを要求したりすることはできません。

Quartets で不正が起こり得るのは、あるカードを持っている(または持っていない)と偽って主張する、次の $2$ つの場合です。

  • 同じ組のカードを $1$ 枚も持っていないのに、その組のカードを要求する場合。または、

  • 要求されたカードを持っているのに、持っていないと答える場合。

言うまでもなく、不正は後になって発覚することがよくあります。ゲームが終わる前のどこかの時点ですべてのカードが公開されるため、理論上は注意深い相手なら最終的にあらゆる不正を見抜けます。

相手が持っているはずのないカード(例えば要求した本人が持っているカード)を要求するのは賢明ではありませんが、それ自体は不正とはみなされません。

入力

入力の最初の行には整数 $n$($1 \le n \le 1000$)が含まれます。これは、ある Quartets のゲームの開始からの連続した行動の数です。続く $n$ 行には、それぞれ $1$ つの行動が記述されます。各行動は $1$ 行で表され、次のいずれかです。

  • 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$)は組を表す $1$ 桁の整数で、$k \in \{\mathrm{A},\mathrm{B},\mathrm{C},\mathrm{D}\}$ は組の中の $4$ 枚を識別する文字です。したがってカード $sk$ には 1A、1B、1C、1D、2A、2B、…、8C、8D というラベルが付きます。先頭の数字が同じ $4$ 枚が $1$ つの組になります。

与えられる列は $4$ 人による有効なゲームを表します。すなわち、前述の $2$ 種類の不正の可能性を除けば、すべての行動はすべてのルールを満たします。

出力

すべてのプレイヤーがルールを守った(途中までかもしれない)ゲームとして行動列が成立するような最初のカードの配り方が存在すれば、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.