loj#P6942. 「ICPC World Finals 2022」Quartets

「ICPC World Finals 2022」Quartets

题目描述

译者注:由于国内并没有和题意相符的扑克牌游戏,因此保留原词。

你正在看一群小孩儿玩 Quartets,他们玩得不亦乐乎。突然你开始怀疑有些孩子可能在作弊。但孩子们自己似乎一点也不在意。恰恰相反,这给他们带来了更多乐趣,尤其是当有人作弊被抓时。作为程序员,你立即开始思考如何通过观察他们的游戏来发现作弊行为。

Quartets 是一种四人纸牌游戏,使用一副 3232 张牌,分成 88 组,每组 44 张牌。实际的纸牌通常印有教育意义的图片,这不仅有助于玩家学到东西,还能学到这些东西的类别。例如,纸牌上会印有动物,而牌组则对应不同的动物类别(哺乳动物、爬行动物等)。

Quartets 开始时,每个玩家都会得到 88 张牌,然后玩家 11 开始。在每一轮中,一名玩家会询问另一名玩家是否有某张牌。如果被问的玩家有这张牌,他们必须把牌交给问牌者,问牌者可以继续问牌,也就是可以再向其他玩家要另一张牌。如果被问到的玩家没有所问的牌,则问牌者的轮次结束,被问到的玩家开始他的轮次。有一条重要的规则,问牌者必须已经有至少一张与他问的牌所在组相同的牌。

如果玩家在其回合内拿到了一整组牌(quartet),则可以向其他玩家展示这组牌,将其放在一边并获得一分。quartet 中的四张牌将从当前游戏中永久移除。如果某玩家在某个时候没有牌了,该玩家就会离开游戏。如果轮到该玩家,则轮到仍有牌的下一位玩家(玩家 123411-2-3-4-1-\ldots)。如果没有玩家有牌,游戏结束,积分最高的玩家获胜。

玩家不能要已从游戏中删除的牌,也不得向已离开游戏的玩家要牌。

在 Quartets 中,有两种情况是可以作弊的,即玩家谎称自己有(或没有)某张牌。具体来说,作弊发生在以下情况:

  • 玩家要求获得一张牌,尽管他没有相应的类别的牌,或
  • 被问到的玩家声称自己没有被问的牌,尽管他有。

显而易见,作弊行为往往是后来才被发现的。从理论上讲,细心的对手最终会发现任何作弊行为,因为在游戏结束前的某个时刻,所有的牌都会被展示。

需要注意的是,要一张被问者不可能拥有的牌(例如,因为问牌者自己手中就有)并不是一个聪明的举动,但它本身并不被视为作弊。

输入格式

第一行包含一个整数 nn1n10001\le n\le 1000),表示在一次 Quartets 游戏中从游戏开始的连续操作数。接下来 nn 行,每行描述一次操作。每次操作用一行如下格式的数据描述:

  • xx A yy sksk yes:玩家 xx 向玩家 yy 要牌 sksk,然后玩家 yy 把牌给了 xx
  • xx A yy sksk no:玩家 xx 向玩家 yy 要牌 sksk,然后玩家 yy 声称自己没有牌 sksk,并开始他的轮次;
  • xx Q ss:玩家 xx 将一组牌 ss 放在一边。

在所有操作中,xxyy1x,y4,xy1\le x,y\le 4,x\neq y)是表示玩家的整数,ss1s81\le s\le 8)是一位整数,表示一组牌(quartet),$k\in\{\texttt{A}, \texttt{B},\texttt{C},\texttt{D}\}$ 用来区分在同一组内的四张牌。因此牌 sksk 可以用 1A1B1C1D2A2B,……,8C8D 来表示。第一位相同的四张牌来自同一组。

给出的操作描述了一个由 44 个玩家进行的合法游戏。也就是说,除了上述两种可能的作弊方式外,所有操作都符合所有规则。

输出格式

如果存在一种可能的初始牌分配方式,使得给出的操作序列对应所有玩家都遵守规则的游戏过程(可能是部分游戏过程),则输出 yes。否则,输出 no,并在接下来一行给出第一个操作的编号,满足在操作完后可以肯定有玩家作弊。操作从 11 开始依次编号,将一组牌放在一边的操作也算在内。

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,而他们都没有 3A3D。因此,其中一人要么谎称没有 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