SP8846 MAHJONG - Fudan Extracurricular Lives

题目描述

# 题目背景 复旦大学的学生有着丰富多彩的课外生活。众所周知,张江校区的许多学生更喜欢"拖拉机"(一种四人扑克游戏,也称为“80分”或“升级”),但有相当多的学生(尤其是计算机科学系)喜欢另一种四人游戏:麻将。麻将是中国历史最悠久的多人游戏之一。不同省份的人们都喜欢这款游戏,并分别指定了各种规则。 开始这个问题,首先,我们要介绍一些关于游戏的基本概念: ## 游戏进行中 最初,所有的麻将洗牌后面朝下放置。之后,玩家每人获得13张牌作为手牌。当轮到某玩家时,可以从牌堆中拿一张牌并与手牌交换,之后便是下一位玩家。直到牌堆中没有牌或任何玩家胜利。 ## 手牌(持有牌) 游戏过程中,玩家应该管理自己的牌组;这些牌组分别为每个玩家的持有牌。玩家的每个持有牌有两种类型:公开和隐藏。公开的牌是公开显示的(明牌),而隐藏的牌是保密的,玩家可以知道所有玩家的公开牌,但只能知道自己的隐藏牌。隐藏牌进行明牌的条件后面进行说明。 ## 胜利 一个玩家的手牌可以经过特定划分,变成由顺子、刻字、对子组成,如果手牌与目标牌一致,那么玩家便赢得比赛 ## 分数 在一个玩家获胜之后,分数根据评分规则系统来判断——众所周知,麻将最初是被邀请参加赌博的。 这里规则采用四川麻将的规则: ## 麻将简述 在中国麻将的原始规则中,游戏以大量的牌为基础,可以分为字牌(东、南、西、北、中、发、白七种)和序数牌(条子、饼子、万子三种花色,每种花色各有1到9的九种牌),每种牌各四张,共108张。一般来说,牌的种类有两个基本信息:花色和号码,因此我们可以根据牌的号码和花色的顺序来命名牌,例如:一饼。当然,人们也习惯的称“一条”为“幺鸡”。 ## 两套限制 这个限制了一个人的手牌最多允许有**两个花色**,也就是说,手牌中有三个花色的不能赢得比赛(实际上,会导致一些惩罚)。 在每个玩家抽牌、出牌的过程中,有一些导致中断的情况。下面进行说明: ## 吃、碰、杠 玩家可以进行**吃**和**碰**,玩家可以吃上家的牌,但可以碰所有人的牌,碰的优先级高于吃。对于玩家出了(或自己抽到)自己刻子的牌,可以进行**杠**,通常自己抽到后,也可以对自己的碰牌进行杠。 吃、碰、杠的牌都变为公开牌。 ## 和牌 玩家出牌(或自己抽到)的牌是自己的听牌时,此时玩家可以和牌,当然和牌要满足一定要求: 1. 符合“两套限制” 2. 手牌以下两种样式中的一个: - **由四个顺子(或刻子)和一个对子组成**。此样式为常规役 - **由七个对子组成**。 由于每个玩家只有13张牌,所以需要一张等待牌来和牌。**注意,如果对于一种等待牌,你的手牌中已经全部拥有(即拥有4张),那么你不可以把它作为你的等待牌** ## 计分 现在我们来明确一下计分规则:一旦玩家达到目标架构(已经获得胜利),他或她的基本分数为1,即最低分数为1。此外,还有很多特定条件可以进一步奖励额外分数。请参阅以下说明: - 杠 如果玩家在他或她的手牌中收集了所有四张相同类型的牌,那么我们说这种牌为杠。每条杠会给1分。**注意,除了公开牌中的杠,隐藏牌中的四张一样的牌也是杠** - 暗七对 如果手牌符合第二种样式,则给玩家加2分。 - 清一色 如果一名玩家所有的手牌(包括隐藏牌和公开牌)都具有相同的花色,那么额外获得2分。 - 对子胡 条件是手牌都是对子,则给玩家1分。 - 带幺九 这是四川麻将中一个令人困惑的规则,即使不是所有的四川玩家都承认这种情况,但在这个问题中我们将其考虑在内。 不管手牌是什么样式,带幺九的条件是要求每个顺子、刻子和对子**都至少**有一个1或9,则给玩家2分。 - 将对 将对是对子胡的一种特殊风格。将对是全由2、5、8组成的大对子。将对比普通对子胡多2分。 - 还有一些与计分相关的项目,但不在本问题中考虑。 对于分数的判断,我们需要注意一个问题。 隐藏牌是(在这个例子中没有公开牌): ![](https://cdn.luogu.com.cn/upload/image_hosting/4csxkm1t.png) 这样,我们可以判断得分为1(基本)+ 2(七对)+ 2(天地相关)= 5?答案是不对的。为了解释这个悖论,请提醒自己注意胜利的定义:玩家获得胜利意味着他可以将持有牌分成获胜的牌型,我们计算分数的时候,只判断一种分法。在这个问题中我们选择所有分发中分数较高的一个。 你的任务是:给定一个玩家的手牌,请确定该玩家的所有等待牌(如果存在)及其对应的分数。

输入格式

输入文件的第一行是整数 $T$($T

输出格式

对于每个case,首先输出一行包含从1开始计数的case number。然后,如果没有等待牌,则输出一行包含“NONE”的字符串(为清晰起见); 否则,输出所有玩家的等待牌,然后在每个等待牌后输出它们对应的分数,用冒号“:”和空格隔开。 所有等待牌各一行。 任何多余的空白(空格或空行)都会导致“WA”。 输出的等待牌这样排序:先按牌种排序,先是 $D$,最后是 $B$ 和 $M$; 再按数字排序,数字越小优先级越高。 # 输入输出样例 ### 输入 \#1 ``` 7 8D8D8D5D2D2D2D 6D6D6D7D7D7D 8D8D8D5D2D2D2D6D6D6D7D7D7D NONE 1D1D1D1D 3D3D3D4D4D4D5D5D5D 2D2D2D5D5D5D2M2M2M5M5M8M8M NONE 1D1D1D1D2D2D2D2D3D3D3D3D9M NONE 1D1D1D1D9D9D9D9D1M1M1M1M9M NONE 2D2D3D3D4D5D5D6D6D7D7D8D8D NONE ``` ### 输出 \#1 ``` Case #1: 5D: 4 Case #2: 4D: 3 5D: 4 6D: 4 7D: 4 8D: 4 Case #3: NONE Case #4: 5M: 4 8M: 4 Case #5: 9M: 6 Case #6: 9M: 8 Case #7: 1D: 3 4D: 5 ```

说明/提示

考虑样本输入的第三种情况,似乎添加一个$1D$可以构建获胜样式,但是,牌堆中并不存在另一个$1D$。 by LingChen