majsoul
题号:NC253265
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小 T 喜欢日本麻将。他特别喜欢做役满,所以他给你了一副牌,问你这个牌是否役满,如果役满,请输出胡的牌形。

输入描述:

第一行输入一个正整数 n,表示未副露的牌的数量(保证合法)接下来 n 个字符串,最后一张表示摸进来的牌。
接下来输入一个正整数 m,表示副露的牌的数量(保证合法,保证副露的是明杠或者碰,没有其他吃或暗杠)接下来 m 个字符串,表示副露的牌。

输出描述:

第一行一个整数,表示是否役满,若没有听牌或者没有役满输出0,否则输出1。
若第一行输出1,则第二行输出胡的役满牌型。若有多种,按照编号从小到大输出,每个之间用空格分隔。
若第一行输出1,则第三行输出役满的倍数
四暗刻 1
四暗刻单骑 2
大三元 3
国士无双 4
国士无双十三面 5
字—色 6
绿—色 7
小四喜 8
大四喜 9
清老头 10
九莲宝灯 11
纯正九莲宝灯 12
四杠子 13
示例1

输入

复制
14
1p 1p 1p 2p 3p 4p 5p 6p 7p 8p 9p 9p 9p 2p
0

输出

复制
1
12
2

备注:

筒用 1~9p 表示,条用 1~9s 表示,万用 1~9w 表示,东南西北中发白分别用:NSWEZFB。不计算累计役满,天地人和,若不知道役满,可以看这个链接 役满 - 最完整的日本麻將中文維基百科 (lingshangkaihua.com)
注:考虑日本麻将的胡牌方式,不考虑古役。