QOJ.ac

QOJ

Límite de tiempo: 2 s Límite de memoria: 2048 MB Puntuación total: 100

#8688. مجموعات الأربع

Estadísticas

تشاهد مجموعة أطفال يستمتعون بلعبة ودية من 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$ من اللاعب $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، أو طلب 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.