QOJ.ac

QOJ

Time Limit: 2.0 s Memory Limit: 512 MB Total points: 100 Hackable ✓

#15193. 立直

Statistics

麻将是一个四人游戏。本题中的麻将规则与传统麻将略有不同。一副麻将牌共包含 136 张牌,其中包含 34 种不同的牌,每种牌各有 4 张:

  • 三种数牌:一到九万(用 1m-9m 表示)、一到九筒(用 1p-9p 表示)、一到九条(用 1s-9s 表示)。其中一和九被称为老头牌(端牌)。
  • 七种字牌:东、南、西、北、白、发、中(用 1z-7z 表示)。

游戏中有 4 名玩家 A、B、C、D。游戏开始前,所有的牌随机排成一排,我们称之为牌山。然后玩家按照以下顺序从牌山顶部摸牌:ABCDABCD……,直到每个人手牌都有 13 张。

之后,他们按照以下顺序开始自己的回合:ABCDABCD……

在每个回合中,玩家从牌山顶部摸一张牌,并从手牌中打出一张牌。

这 136 张牌可以组合成不同的类型:

  1. 顺子:同一种数牌的连续三张牌。 例如:

  2. 刻子:由三张完全相同的牌组成。 例如:

  3. 杠子:由四张完全相同的牌组成。 例如:

  4. 对子:由两张完全相同的牌组成。 例如:

  5. 面子:一个面子可以是顺子、刻子或杠子。

和牌:当玩家手牌满足和牌条件时,我们称之为和牌。 一个完整的和牌通常由 4 个面子和 1 个对子组成。 然而,还有 2 种特殊牌型也可以被判定为和牌:

  1. 七对子:手牌由 7 个不同的对子组成。
  2. 国士无双:手牌包含 13 种不同的老头牌和字牌各一张,外加其中任意一张的重复牌。 例如:

听牌:如果玩家的手牌只需要再获得一张牌就能组成和牌,则称该手牌处于“听牌”状态。所缺少的牌的集合称为“听牌集合”。注意:如果你手牌中已经有了 4 张相同的牌,这张牌将不会加入到“听牌集合”中。

自摸:当玩家摸到一张牌,且此时他手牌中的牌可以被判定为和牌时,他可以宣告“自摸”并赢得游戏。

立直:手牌处于“听牌”状态的玩家可以宣告“立直”。宣告“立直”后,玩家在摸牌时,只能选择“暗杠”、“自摸”或直接打出刚刚摸到的那张牌(摸切)。

暗杠:如果玩家摸到一张牌,且这张牌可以与手牌中的一个刻子组合,他可以将这四张牌固定为杠子,并从牌山顶部摸一张新牌(岭上牌)。然后他可以继续选择“自摸”或“暗杠”。注意:立直后的暗杠不能改变“听牌集合”。

流局:当牌山中的所有牌都被摸完,且仍没有人获胜时,我们称这种情况为“流局”。

注意:在本题中,没有“吃”、“碰”、“明杠”、“荣和”、“四家立直流局”、“四杠散了流局”等规则。

现在,4 名玩家 A、B、C、D 正在打麻将,并且他们都已经宣告了“立直”。然而,在他们宣告“立直”之前,没有宣告过任何暗杠。现在牌山中还剩下一些牌,轮到 A 的回合。假设 A、B、C、D 知道牌山中的所有牌以及其他人的手牌(即完美信息)。

当玩家摸到一张牌时(包括暗杠后摸到的牌),他将依次遵循以下策略:

  1. 如果他可以宣告“自摸”,他会宣告“自摸”并赢得游戏。
  2. 如果他不能进行暗杠,他将打出这张牌。
  3. 如果存在一种选择(暗杠或打出此牌)能让他最终赢得游戏,他会做出该选择。
  4. 如果存在一种选择(暗杠或打出此牌)能导致流局,他会做出该选择。
  5. 如果他可以暗杠,他会选择暗杠。

如果所有玩家都采取最优策略,谁会是获胜者,或者是否会流局?

输入格式

本题包含 $T$ 组测试数据。

输入数据第一行包含一个整数 $T$ ($1 \le T \le 10^3$)。

对于每组测试数据:

前四行每行包含 13 张牌,分别表示 A、B、C、D 的手牌。

第五行包含一个整数 $l$,表示牌山中剩余的牌数。

第六行包含 $l$ 张牌,表示牌山中剩余的牌(按从上到下的顺序)。

保证所有相同的牌在输入中出现的总次数不超过 4 次。

输出格式

输出共 $T$ 行。

对于每组测试数据,如果游戏最终流局,输出 DRAW。否则,输出获胜者的名字(大写字母 ABCD)。

样例

输入样例 1

2
2s 2s 2s 3s 6s 6s 6s 8s 8s 8s 6z 6z 6z
1s 1s 1s 2s 3s 4s 5s 6s 7s 8s 9s 9s 9s
1z 1z 1z 2z 2z 2z 3z 3z 3z 4z 4z 4z 5z
1m 1m 2m 2m 3m 3m 5m 7m 7m 8m 8m 9m 9m
3
6z 9s 1s
2s 2s 2s 3s 6s 6s 6s 8s 8s 8s 6z 6z 6z
1s 1s 1s 2s 3s 4s 5s 6s 7s 8s 9s 9s 9s
1z 1z 1z 2z 2z 2z 3z 3z 3z 4z 4z 4z 5z
1m 1m 2m 2m 3m 3m 5m 7m 7m 8m 8m 9m 9m
6
6z 9s 5z 1z 4m 5m

输出样例 1

B
DRAW

说明

在第一组测试数据中,4 名玩家的手牌为:

无论 A 是否选择暗杠“发”(6z),B 最终都会“自摸”并赢得游戏。

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.