#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,并将扑克牌推广到更一般的情况:

假定牌点除大小王之外有 nn 种不同的牌点,牌点由大到小排列为:大王、小王、2Ann-1、……43,常见的扑克牌就是 n=13n=13 的情况。目标是对牌进行组合使得比 A 小的单张个数尽量少,即 33nn 中的单张数尽量少。这里假定 n13n\ge 13

A 在搭配成顺子时,可视作比 n 大的牌点或最小牌点 1 使用,即 Ann-1n-2n-354321 都是合法的顺子。但注意 2 不会作为比 A 大的牌点搭配顺子,只会作为比 3 小的牌点进行搭配,即 2Ann-1n-2 不是合法的顺子。

输入格式

从标准输入读入数据。

输入的第一行包含两个正整数 nnmm,表示最大牌点为 nn,有 mm 组牌需要进行组合。

接下来输入 mm 行,第 i+1i+1 行表示第 ii 组牌。在每组牌中,每张牌由两个字符串 XXYY 表示,其中 XX 表示花色,YY 表示牌点(对应关系如下表所示),XXYY 间用一个空格隔开。

例如 H 2 表示 ♥2R 0 表示大王。每两张牌之间用一个空格隔开,每行的末尾没有空格。

注意:在一组牌中,每种牌可能有多张,具体数量不设上限,比如可能有多张大王牌 R 0

牌的种类 XX YY
H 可能是 A234、...、n-1n 之一
S
♦️ D
♣️ C
大王 R 0
小王 B

输出格式

输出到标准输出。

输出共 mm 行,第 ii 行包含一个整数,表示第 ii 组牌的不同组合方式的最小单张数(只考虑比 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 4H 3

第二组牌最优组合方式为:S 13H 13 组成对子,剩余 0 张单张。

子任务

本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。

子任务编号 分值 13n13\le n \le 1m1\le m \le 每组牌的张数上限
1 25 1313 11 1515
2 1010 5050
3 500500 2×1032\times 10^3
4 2×1032\times 10^3 10410^4