检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目背景
小 M 十分喜欢立直麻将这种棋牌游戏,而不论是什么麻将,麻将都拥有相似的胡牌规则,小 M 想要考考你,对于给定的一幅手牌,其是否符合麻将的一般型(面子手)中的胡牌型。此外,为了增加难度,小 M 还会考验你给定一幅听牌的手牌,问这幅手牌听什么牌(也就是多获得一张什么样的牌可以胡牌)。
#题目描述
关于麻将的规则,小 M 的介绍如下:
- 一幅麻将手牌胡牌时应当恰有 张牌(也就是听牌时恰有 张牌),本题中的麻将也不例外;
- 本题中,麻将共有三种花色,分别是万(用
m
表示)、饼(用p
表示)、索(用s
表示),每种花色共有 种牌(编号为 ),每种牌最多 张,例如一万记为1m
、九索记为9s
。 - 一幅麻将胡牌时应当由 组面子与 组雀头组成,其中雀头是指两张完全相同的牌(如:
22s
、99m
),而面子在本题中一共有顺子与刻子两种; - 顺子是指数字大小连续的三张同花色的牌,例如:
123s
、789p
、456m
;但形如135m
、159p
、891s
的三张牌则不构成顺子; - 刻子是指三张完全相同的牌,如:
333m
、777s
、444p
;但形如445s
的三张牌则不构成刻子; - 当听牌在手牌中已经出现 张时,由于没有第 张牌可以胡,不认为这张牌是所听的牌。
#输入格式
输入第一行一个正整数 ,表示麻将牌的张数。
第二行一个正整数 表示手牌组数。
接下来 行,每行 个用空格分隔的长度为 的字符串,表示手牌。
#输出格式
输出共 行,对于每组数据:
- 若 输出一行一个非负整数, 表示胡牌, 表示没胡。
- 若 输出一行若干个用空格分隔的长度为 的字符串,按照第一关键字为
mps
,第二关键字为1-9
的顺序将给定手牌的听牌输出(若没听则输出空行)。
#输入输出样例
样例输入 #1
14
2
1s 1s 1s 2s 3s 4s 5s 6s 7s 8s 9s 9s 9s 5s
1s 1s 1s 2s 3s 4s 5s 6s 7s 8s 9s 9s 9s 1m
样例输出 #1
1
0
样例输入 #2
13
7
1s 2s 3s 4s 5s 6s 7s 8s 9s 1m 1m 2p 3p
2s 2s 3s 3s 4s 4s 5s 6s 6s 7s 7s 8s 8s
1m 1m 1m 1m 2m 2m 2m 2m 3m 3m 3m 4m 9m
1s 1s 1s 2s 3s 4s 5s 6s 7s 8s 9s 9s 9s
1m 1m 1m 2m 3m 7p 8p 9p 9p 9p 9s 9s 9s
1m 1m 1m 1m 2m 2m 3m 3m 7s 8s 9s 9s 9s
2p 3p 4p 4p 4p 4p 5p 6p 7s 8s 9s 9s 9s
样例输出 #2
1p 4p
2s 5s 8s
1s 2s 3s 4s 5s 6s 7s 8s 9s
1m 4m 6p 9p
4m 6s 9s
1p 7p 6s 9s
#数据范围与约定
对于 的数据,,。
测试点编号 | 出现的花色的最小数量 | 每张牌最多出现的次数 | 特殊性质 | |
---|---|---|---|---|
有 | ||||
无 | ||||
有 | ||||
无 | ||||
特殊性质:最多只会有一种牌的张数为两张。
#思路
先考虑胡牌时()的情况:当每张牌最多出现 次时,只需要考虑顺子和雀头,简单的枚举雀头然后贪心检索即可。其他情况可以暴力检验剩余的牌是否为刻子即可。
当 时直接暴力枚举第 张牌,不会超出时间限制。
#代码
1 |
|