#P50001. 人工智能
人工智能
题目描述
你是一个人工智能,你需要帮助小 A 完成一局麻将游戏。
小 A 十分喜欢立直麻将这种棋牌游戏,而不论是什么麻将,麻将都拥有相似的胡牌规则,小 A 想要作为人工智能的你来回答,对于给定的一幅手牌,其是否符合麻将的一般型(面子手)中的胡牌型。
此外,为了增加难度,小 A 还会考验你给定一幅听牌的手牌,问这幅手牌听什么牌(也就是多获得一张什么样的牌可以胡牌)。
关于麻将的规则,小 A 的介绍如下:
- 一幅麻将手牌胡牌时应当恰有 张牌(也就是听牌时恰有 张牌),本题中的麻将也不例外;
- 本题中,麻将共有三种花色,分别是万(m)、饼(p)、索(s),每种花色共有 种牌(编号为 ),每种牌最多 张,例如一万记为
1m
、九索记为9s
。 - 一幅麻将胡牌时应当由 组面子与 组雀头组成,其中雀头是指两张完全相同的牌(如:
22s
,99m
),而面子在本题中一共有顺子与刻子两种,介绍如下:- 顺子是指数字大小连续的三张同花色的牌,例如:
123s
,789p
,456m
;但形如135m
,159p
,891s
的三张牌则不构成顺子; - 刻子是指三张完全相同的牌,如:
333m
,777s
,444p
;但形如445s
的三张牌则不构成刻子。
- 顺子是指数字大小连续的三张同花色的牌,例如:
- 当听牌在手牌中已经出现 张时,由于没有第 张牌可以胡,不认为这张牌是所听的牌。
输入格式
第一行一个正整数 ,表示麻将牌的张数。
第二行一个正整数 表示手牌组数。
接下来 行,每行 个用空格分隔的长度为 的字符串,表示手牌。
输出格式
输出共 行,对于每组数据:
- 若 输出一行一个非负整数,
1
表示胡牌,0
表示没胡。 - 若 输出一行若干个用空格分隔的长度为 的字符串,按照第一关键字为
mps
,第二关键字为123456789
的顺序将给定手牌的听牌输出(若没听则输出空行)。
样例输入与输出
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
0
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
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
数据规模与约定
对于所有数据,,,每个测试点的具体约束如下:
为了方便阅读,我们将测试点编号放在了表格中央。
出现的花色数最少为 ,每张牌最多出现 次。
- 特殊性质:最多只会有一种牌的张数为两张。
测试点编号 | 特殊性质 | |||
---|---|---|---|---|
14 | 3 | 2 | 1 | 有 |
2 | 无 | |||
3 | ||||
4 | ||||
2 | 2 | 5 | ||
3 | 6 | |||
4 | 7 | |||
1 | 2 | 8 | ||
3 | 9 | |||
4 | 10 | |||
11 | ||||
13 | 3 | 2 | 12 | 有 |
13 | 无 | |||
3 | 14 | |||
4 | 15 | |||
2 | 2 | 16 | ||
3 | 17 | |||
4 | 18 | |||
1 | 2 | 19 | ||
3 | 20~22 | |||
4 | 23~25 |