U28773.薯片君的扑克牌
提高+/省选-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
薯片君最近迷上了德国斗地主,一下课就要和小码君斗地主。
这一天,薯片君像往常一样玩德国斗地主,但他的老师叫他去玩德州扑克,薯片君只能遵命。牌已经发完了,等会再来打时间又来不及,薯片君想了一个好主意,叫他的宠物 AC 狗帮他打牌。
作为 AI 的 AC 狗自然是很忠诚地接下了任务,但它发现了一个问题,它只会打牌,不会整理。于是他请你帮他整理薯片君的牌,作为报酬是保佑你“考的全会,蒙的全对”。
现在请你编写一个程序,帮 AC 狗整理薯片君的扑克牌。
你需要按规则整理扑克牌组。
「单牌」:扑克牌从大到小依次是大王 JOKER,小王 joker,2,A,国王 K,王后 Q,骑士 K,10,9,8,7,6,5,4,3。其中大小王各一张,其他牌都是 4 张。「单牌」直接输出对应的扑克牌名称即可。
「对子」:A pair of ...
,即两张相同的牌;
「三张」:Three of ...
,即三张相同的牌;
「三带一」:Three of ... with ...
,即三张相同的牌加上一张单牌;
「顺子」:Flush from ... to ...
,即五张及以上大小相邻不相同的牌、2 和大小王除外;
「连对」:Flush pair from ... to ...
,即三个及以上大小相邻不相同的对子、2 除外;
「飞机」:Plane ... and ...
,即两个大小相邻不相同的三张、2除外,如果是由三带一组成,需要再按从小到大输出with ... and ...
;
「炸弹」:The boom of ...
,即四张相同的牌;
「王炸」:A-BOOM
,即由大小王组成。
题面注释中的 ...
代表 1 张牌的名称。
优先级说明:王炸 > 炸弹 > 飞机 > 连对 > 顺子 > 三带一 > 三张,各组合中牌越大,组合越大,如 3 到 8 的「顺子」大于 3 到 7 的「顺子」。
整理规则:
- 优先整理「王炸」与「炸弹」。
- 「单牌」 越少越好、越大越好。即在先整理「王炸」与「炸弹」的前提下,尽量让「单牌」的数量更小,其牌值尽可能大。如果与第 6 条冲突,请优先遵循第 6 条。
- 「对子」 越少越好、越大越好,解释同上一条。
- 优先级高的组合优先整理,如在满足前 3 条的情况下,「飞机」越多越好,如果「飞机」一样多,「连对」越多越好,以此类推。
- 尽量不要把大的组合拆成多个小的组合,详见样例 1。
- 尽量让大的「三张」带大的「单牌」。
由于 AC 狗等得花都谢了,所以你只有 1 秒时间。
输入格式
1 行,13 个字符串,用空格隔开,表示 13 张扑克牌。
输出格式
多行,从大到小输出薯片君的扑克牌整理后的组合,每行输出一个组合。
输入输出样例
输入#1
9 8 5 4 7 4 4 6 JOKER A A A 10
输出#1
Flush from 5 to 10 Three of A with JOKER Three of 4
输入#2
5 5 7 7 5 6 6 5 2 6 2 7 2
输出#2
The boom of 5 Plane 6 and 7 Three of 2
输入#3
3 4 5 6 7 8 8 9 9 10 10 J Q
输出#3
Flush from 8 to Q Flush from 3 to 10
说明/提示
在样例 1 中,为了让「单牌」少一些,可以整理「顺子」,再整理一个「三带一」和一个「三张」。值得注意的是,为了让「顺子」大一点,应把 10 连成「顺子」,而不是带在「三带一」里。
在样例 2 中,5 炸必须优先整理。再整理 「飞机」,最后整理「三张」2。
在样例 3 中,虽然可以 「连对」,但是为了让「单牌」尽可能少,必须拆成 2 个「顺子」。
对于所有测试点,保证输入的内容均在给定 13 张单牌之内。