#cacc20251D. 智能组牌
智能组牌
时间限制: 1.0 秒
空间限制: 64 MB
题目描述
Bob 很喜欢打牌,但是他最困难的地方在于牌型很多,拿到手里的牌总是有很多种不同的牌型组合方式,比如 ♠10♥10♠9♣8♠7♥6,可以整理成一个对子 ♠10♥10 加上四张单张 ♠9♣8♠7♥6,也可以整理成一张单张 ♠10 加上一个顺子 ♥10♠9♣8♠7♥6。
Bob 觉得打牌的过程中单张总是比较难出,尤其是牌点较小的单张,所以他希望找到一种单张尽量少的组合方式,比如上面 6 张牌的情况,单张最少的组合方式就是 1 张单张。然而,由于牌型众多,他想寻求您的帮助。
以下介绍你需要考虑的牌型种类和规则:
| 牌型名称 | 牌型张数 | 牌型解释 |
|---|---|---|
| 单张 | 1 | 任意一张牌 |
| 对子 | 2 | 两张牌点相同的牌型,包括两张大王和两张小王 |
| 三同张 | 3 | 三张牌点相同的牌型 |
| 顺子 | 5 | 五个牌点相邻的单张组成的牌型 |
我们假定级牌(除大小王之外最大的牌)永远是 2,并将扑克牌推广到更一般的情况:
假定牌点除大小王之外有 种不同的牌点,牌点由大到小排列为:大王、小王、2、A、n、n-1、……4、3,常见的扑克牌就是 的情况。目标是对牌进行组合使得比 A 小的单张个数尽量少,即 到 中的单张数尽量少。这里假定 。
A 在搭配成顺子时,可视作比 n 大的牌点或最小牌点 1 使用,即 A、n、n-1、n-2、n-3 和 5、4、3、2、1 都是合法的顺子。但注意 2 不会作为比 A 大的牌点搭配顺子,只会作为比 3 小的牌点进行搭配,即 2、A、n、n-1、n-2 不是合法的顺子。
输入格式
从标准输入读入数据。
输入的第一行包含两个正整数 和 ,表示最大牌点为 ,有 组牌需要进行组合。
接下来输入 行,第 行表示第 组牌。在每组牌中,每张牌由两个字符串 和 表示,其中 表示花色, 表示牌点(对应关系如下表所示), 和 间用一个空格隔开。
例如 H 2 表示 ♥2,R 0 表示大王。每两张牌之间用一个空格隔开,每行的末尾没有空格。
注意:在一组牌中,每种牌可能有多张,具体数量不设上限,比如可能有多张大王牌 R 0。
| 牌的种类 | ||
|---|---|---|
| ♥ | H |
可能是 A、2、3、4、...、n-1、n 之一 |
| ♠ | S |
|
| ♦️ | D |
|
| ♣️ | C |
|
| 大王 | R |
0 |
| 小王 | B |
输出格式
输出到标准输出。
输出共 行,第 行包含一个整数,表示第 组牌的不同组合方式的最小单张数(只考虑比 A 严格小的单张)。
13 2
S 10 H 10 S 9 C 8 D 7 H 6
R 0 R 0 S 2 S 13
1
1
样例 1 解释
第一组牌单张最小的组合方式为:H 10 S 9 C 8 D 7 H 6 构成顺子,只剩余 1 张单张 S 10。
第二组牌两张大王牌可以组成一个对子,其他两张无法构成除单张外的牌型,其中牌点小于 A 的单张牌有一张,为 S 13。
20 2
S 4 H 3 D 2 D A H 20 H 19 C 18 C 17
S 13 H 13
2
0
样例 2 解释
第一组牌最优组合方式为:D A H 20 H 19 C 18 C 17 构成顺子,剩余小于 A 的单张有两张:S 4 和 H 3。
第二组牌最优组合方式为:S 13 和 H 13 组成对子,剩余 0 张单张。
子任务
本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。
| 子任务编号 | 分值 | 每组牌的张数上限 | ||
|---|---|---|---|---|
| 1 | 25 | |||
| 2 | ||||
| 3 | ||||
| 4 |