QOJ.ac

QOJ

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

#8688. Bộ bốn

Statistics

Bạn đang xem một nhóm trẻ vui vẻ chơi một ván Quartets thân thiện. Đến một lúc, bạn bắt đầu nghi ngờ vài đứa trẻ có thể gian lận. Bản thân chúng dường như chẳng hề bận tâm. Ngược lại, điều đó còn làm chúng vui hơn, nhất là khi ai đó bị bắt quả tang. Là một lập trình viên, bạn lập tức nghĩ cách phát hiện gian lận chỉ bằng việc quan sát ván chơi.

Quartets là trò chơi bài cho bốn người, dùng bộ $32$ lá chia thành $8$ bộ, mỗi bộ $4$ lá. Các lá bài thực tế thường có hình ảnh giáo dục, giúp người chơi học cả các đối tượng riêng lẻ lẫn cách phân loại chúng. Ví dụ, bài có thể vẽ động vật, còn các bộ tương ứng với những nhóm động vật khác nhau (thú, bò sát, v.v.).

problem_8688_c012c73f8edd38ed2a0cf5aef1ad487e.jpg

Bốn lá cùng bộ, từ bộ bài Quartets Đức của Wilhelm Busch qua Wikimedia Commons, thuộc phạm vi công cộng.

Khi bắt đầu, mỗi người được chia $8$ lá và người chơi $1$ bắt đầu lượt. Trong mỗi lượt, một người hỏi người khác có một lá bài cụ thể hay không. Nếu người được hỏi có lá đó, họ phải đưa cho người yêu cầu; người yêu cầu tiếp tục lượt bằng cách xin một lá khác từ bất kỳ người chơi nào. Nếu người được hỏi không có lá đó, người yêu cầu mất lượt và người được hỏi bắt đầu lượt. Một quy tắc quan trọng là người yêu cầu phải đang có ít nhất một lá cùng bộ với lá mình xin.

Nếu trong lượt của mình, một người có đủ một bộ («bộ bốn»), họ có thể cho các người khác xem, đặt bộ đó sang bên và được một điểm. Bốn lá của bộ đó bị loại vĩnh viễn khỏi ván hiện tại. Nếu vào bất kỳ lúc nào một người hết bài, họ rời ván. Nếu đang là lượt của họ, lượt chuyển sang người tiếp theo theo thứ tự $1$-$2$-$3$-$4$-$1$-$\ldots$ vẫn còn bài. Nếu không ai còn bài, ván kết thúc và người có nhiều điểm nhất thắng.

Không được xin những lá đã bị loại khỏi ván, và không được xin bài từ người đã rời ván.

Có thể gian lận trong Quartets ở hai tình huống khi một người nói sai rằng mình có (hoặc không có) một lá bài. Cụ thể, gian lận xảy ra nếu

  • một người xin một lá bài dù không có lá nào thuộc bộ tương ứng, hoặc

  • người được hỏi nói rằng không có lá được xin dù thực sự có nó.

Hiển nhiên, gian lận thường bị phát hiện về sau. Về lý thuyết, một đối thủ chú ý cuối cùng có thể phát hiện mọi gian lận, vì tất cả lá bài cuối cùng đều được lộ ra vào một thời điểm trước khi ván kết thúc.

Xin một lá mà người được hỏi không thể có (chẳng hạn vì nó ở ngay trên tay người xin) không phải nước đi thông minh, nhưng bản thân việc đó không được coi là gian lận.

Dữ liệu vào

Dòng đầu chứa số nguyên $n$ ($1 \le n \le 1000$), số hành động liên tiếp trong một ván Quartets tính từ đầu ván. Mỗi dòng trong $n$ dòng tiếp theo mô tả một hành động. Mỗi hành động chiếm một dòng và có thể là một trong các dạng sau:

  • x A y sk yes — người chơi $x$ xin lá $sk$ từ người chơi $y$, và người chơi $y$ đưa lá đó cho người chơi $x$;

  • x A y sk no — người chơi $x$ xin lá $sk$ từ người chơi $y$, người chơi $y$ nói không có và bắt đầu lượt của mình;

  • x Q s — người chơi $x$ đặt bộ bốn $s$ sang bên.

Trong mọi hành động, $x$ và $y$ ($1 \le x,y \le 4$, $x \ne y$) là các số nguyên chỉ người chơi; $s$ ($1 \le s \le 8$) là số nguyên một chữ số tương ứng với một bộ/bộ bốn; còn $k \in \{\mathrm{A},\mathrm{B},\mathrm{C},\mathrm{D}\}$ là ký tự phân biệt bốn lá trong một bộ. Do đó, các lá $sk$ được ghi nhãn 1A, 1B, 1C, 1D, 2A, 2B, …, 8C, 8D. Bốn lá có cùng chữ số đầu thuộc cùng một bộ.

Dãy đã cho mô tả một ván hợp lệ giữa bốn người. Nghĩa là, ngoại trừ hai cách gian lận có thể xảy ra đã nêu, mọi hành động đều tuân thủ tất cả quy tắc.

Dữ liệu ra

Nếu tồn tại cách chia bài ban đầu để dãy hành động tương ứng với một ván (có thể chưa hoàn tất) mà mọi người đều tuân thủ quy tắc, in yes. Nếu không, in no, rồi ở dòng tiếp theo in số thứ tự hành động đầu tiên mà sau đó chắc chắn đã có người gian lận. Các hành động được đánh số liên tiếp từ $1$; hành động đặt bộ bốn sang bên cũng được tính.

Ví dụ

Dữ liệu vào 1

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

Dữ liệu ra 1

no
4

Ghi chú

Người chơi $1$ và $2$ đều nói không có 3C, và không ai trong hai người có 3A hay 3D. Vậy một người đã nói dối về việc không có 3C, hoặc đã xin 3C mà không có 3B (lá duy nhất còn lại của bộ $3$).

Dữ liệu vào 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

Dữ liệu ra 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.