loj#P6942. 「ICPC World Finals 2022」Quartets
「ICPC World Finals 2022」Quartets
题目描述
译者注:由于国内并没有和题意相符的扑克牌游戏,因此保留原词。
你正在看一群小孩儿玩 Quartets,他们玩得不亦乐乎。突然你开始怀疑有些孩子可能在作弊。但孩子们自己似乎一点也不在意。恰恰相反,这给他们带来了更多乐趣,尤其是当有人作弊被抓时。作为程序员,你立即开始思考如何通过观察他们的游戏来发现作弊行为。
Quartets 是一种四人纸牌游戏,使用一副 张牌,分成 组,每组 张牌。实际的纸牌通常印有教育意义的图片,这不仅有助于玩家学到东西,还能学到这些东西的类别。例如,纸牌上会印有动物,而牌组则对应不同的动物类别(哺乳动物、爬行动物等)。
Quartets 开始时,每个玩家都会得到 张牌,然后玩家 开始。在每一轮中,一名玩家会询问另一名玩家是否有某张牌。如果被问的玩家有这张牌,他们必须把牌交给问牌者,问牌者可以继续问牌,也就是可以再向其他玩家要另一张牌。如果被问到的玩家没有所问的牌,则问牌者的轮次结束,被问到的玩家开始他的轮次。有一条重要的规则,问牌者必须已经有至少一张与他问的牌所在组相同的牌。
如果玩家在其回合内拿到了一整组牌(quartet),则可以向其他玩家展示这组牌,将其放在一边并获得一分。quartet 中的四张牌将从当前游戏中永久移除。如果某玩家在某个时候没有牌了,该玩家就会离开游戏。如果轮到该玩家,则轮到仍有牌的下一位玩家(玩家 )。如果没有玩家有牌,游戏结束,积分最高的玩家获胜。
玩家不能要已从游戏中删除的牌,也不得向已离开游戏的玩家要牌。
在 Quartets 中,有两种情况是可以作弊的,即玩家谎称自己有(或没有)某张牌。具体来说,作弊发生在以下情况:
- 玩家要求获得一张牌,尽管他没有相应的类别的牌,或
- 被问到的玩家声称自己没有被问的牌,尽管他有。
显而易见,作弊行为往往是后来才被发现的。从理论上讲,细心的对手最终会发现任何作弊行为,因为在游戏结束前的某个时刻,所有的牌都会被展示。
需要注意的是,要一张被问者不可能拥有的牌(例如,因为问牌者自己手中就有)并不是一个聪明的举动,但它本身并不被视为作弊。
输入格式
第一行包含一个整数 (),表示在一次 Quartets 游戏中从游戏开始的连续操作数。接下来 行,每行描述一次操作。每次操作用一行如下格式的数据描述:
-
A
yes
:玩家 向玩家 要牌 ,然后玩家 把牌给了 ; -
A
no
:玩家 向玩家 要牌 ,然后玩家 声称自己没有牌 ,并开始他的轮次; -
Q
:玩家 将一组牌 放在一边。
在所有操作中, 和 ()是表示玩家的整数,()是一位整数,表示一组牌(quartet),$k\in\{\texttt{A}, \texttt{B},\texttt{C},\texttt{D}\}$ 用来区分在同一组内的四张牌。因此牌 可以用 1A
,1B
,1C
,1D
,2A
,2B
,……,8C
,8D
来表示。第一位相同的四张牌来自同一组。
给出的操作描述了一个由 个玩家进行的合法游戏。也就是说,除了上述两种可能的作弊方式外,所有操作都符合所有规则。
输出格式
如果存在一种可能的初始牌分配方式,使得给出的操作序列对应所有玩家都遵守规则的游戏过程(可能是部分游戏过程),则输出 yes
。否则,输出 no
,并在接下来一行给出第一个操作的编号,满足在操作完后可以肯定有玩家作弊。操作从 开始依次编号,将一组牌放在一边的操作也算在内。
4
1 A 2 3C no
2 A 3 3A yes
2 A 4 3D yes
2 A 1 3C no
no
4
玩家 1 和 2 都声称没有 3C
,而他们都没有 3A
或 3D
。因此,其中一人要么谎称没有 3C
,要么在没有 3B
(第 3 组中唯一剩下的牌)的情况下要了 3C
。
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
yes