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

ไพ่สี่ใบในชุดเดียวกันจากสำรับ Quartets เยอรมันโดย Wilhelm Busch ผ่าน 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$ ขอไพ่ $sk$ จากผู้เล่น $y$ และผู้เล่น $y$ ส่งไพ่ใบนั้นให้ผู้เล่น $x$;

  • x A y sk no — ผู้เล่น $x$ ขอไพ่ $sk$ จากผู้เล่น $y$ ผู้เล่น $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 หรือขอ 3C โดยไม่มี 3B (ไพ่ใบเดียวที่เหลือในชุด $3$)

ข้อมูลนำเข้า 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.