|
||||||||||
清一色Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 112 Accepted Submission(s): 53 Problem Description 又在和群里的大佬们打日本麻将了,她熟练地从牌山中摸来一个牌,然后发现,手里 14 张牌全都是同一个花色的,也就是说,如果这些牌能够组成四个“面子”和一个“对子”构成的“一般形”,或者是七个互不相同的“对子”的“七对形”,那她就可以达成杀伤力极强的番种 - 清一色。 所谓“面子”,指的是“刻子”和“顺子”中的其中一种(我们不考虑“吃碰杠”等特殊情况,“暗杠”就更不考虑了)。“刻子”就是三张一模一样的牌,比如 111, 222 等(这里由于都是同一种花色,所以麻将牌的花色省略,只看麻将牌的数字),而“顺子”就是三张数字可以组成以 1 为等差数列的牌,如 123, 234, 345 等,但是,891, 912 这样的不算。 而所谓“对子”,指的就是两张一样的牌,如 11,22 等。 由于 Annie2212 第一次做这么厉害的牌,缺乏经验,她想知道,她是不是已经做出了“清一色”,如果做出来了,她就可以喊一句“自摸”并把牌推倒亮明,赢得本局。 如果还没做出来,她想知道自己是否已经“听牌”,所谓“听牌”就是指换掉一张牌就可以自摸的状态,而且她想知道可以怎么换牌,她需要知道所有的选项以方便她做出决定。 值得注意的是,游戏中每种牌各有四张,如果所等的牌自己已经有四张的话,我们当然不能再等这种牌。 那么这个烧脑的任务就交给你了。 Input 本题有多组测试数据,每组测试数据有两行: 第一行:Annie2212 刚从牌山中摸到的牌,毕竟都是同一花色,我们直接用一个范围在 1 到 9 (闭区间)以内的数字表示麻将牌,下同。 第二行:摸牌前 Annie2212 手上的 13 张牌,每张牌用一个空格隔开,保证这 13 张牌已从小到大排序。 最后一个测试数据之后,会有单独的一行,这一行只有一个数字 "0" ,表示输入结束。 Output 如果能自摸,输出一行 "tsumo" 即可 (没有引号,下同) 如果不能自摸,但是能听牌,输出一行 "tenpai" 后,下面若干行表示出所有换牌的选项,格式为: X1: Y11 Y12 ... Y1j ... X2: Y21 Y22 ... Y2j ... ... Xi: Xi1 Xi2 ... Yij ... ... 表示如果换掉 Xi 这种牌中的一张的话,应该等 Yi1, Yi2, ... 这些牌中的一张才能自摸,注意,Xi 和 Yi1 之间是用一个冒号和一个空格隔开的,同一行的各个 Yij 之间是用一个空格隔开的,并且所有的 Xi 必须从小到大排序,同一行的 Yij 也要从小到大排序。 如果连听牌都做不到,输出一行 "noten" 即可。 样例解释: 第一组数据:1245679 正好是七种牌,各有两张,构成“七对形”,直接自摸 第二组数据:若摸到的 9 直接打出,这 13 张手牌可以拆解成 123-123-123-23-44,对这个 23 要构成“一般形”中的“顺子”要等 1 或 4,也可以拆解成 111-222-33-234-34,那么对这个 34 要构成“顺子”要等 2 或 5,而 2 已经有四张,不可能再摸到了,所以不考虑 2 而考虑 5 第三组数据:“七对形”要求七个“对子”的种类各不相同,所以像这样有两个相同“对子”的牌型,在日本麻将中不被承认,需要再换掉两张牌才能胡“七对型”,连听牌都没有。 Sample Input
Sample Output
Source | ||||||||||
|