3697. T1-扑克牌[CSP-J2024] 标准IO
时间限制:1000 MS 内存限制:256 MB    算法评级:    状态:

题目描述

       小 $ P $ 从同学小 $ Q $ 那儿借来一副 $ n $ 张牌的扑克牌。

       本题中我们不考虑大小王,此时每张牌具有两个属性:花色和点数。花色共有 $ 4 $ 种: 方片、草花、红桃和黑桃。点数共有 $ 13 $ 种,从小到大分别为 $ A\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ T\ J\ Q\ K $ 。注意:点数 $ 10 $ 在本题中记为 $ T $ 。

       我们称一副扑克牌是完整的,当且仅当对于每一种花色和每一种点数,都恰好有一张牌具有对应的花色和点数。由此,一副完整的扑克牌恰好有 $ 4 $ × $ 13 $ = $ 52  $ 张牌。以下图片展示了一副完整的扑克牌里所有的 $ 52 $ 张牌。

                                               图 1: 一副完整的扑克牌

       小 $ P $ 借来的牌可能不是完整的,为此小 $ P $ 准备再向同学小 $ S $ 借若干张牌。可以认为小 $ S $ 每种牌都有无限张,因此小 $ P $ 可以任意选择借来的牌。小 $ P $ 想知道他至少得向小 $ S $ 借多少张牌,才能让从小 $ S $ 和小 $ Q $ 借来的牌中,可以选出 $ 52 $ 张牌构成一副完整的扑克牌。

       为了方便你的输入,我们使用字符 $ D $ 代表方片,字符 $ C $ 代表草花,字符 $ H $ 代表红桃,字符 $ S $ 代表黑这样每张牌可以通过一个长度为 $  2 $ 的字符串表示,其中第一个字符表示这张牌的花色,第二个字符表示这张牌的点数,例如 $ CA $ 表示草花 $ A $ , $ ST $ 表示黑桃 $ T $ (黑桃 $ 10 $ )


输入格式

从文件 $ poker.in  $ 中读入数据。

输入的第一行包含一个整数 $ n $ 表示牌数。

接下来 $ n $ 行:

每行包含一个长度为 $ 2 $ 的字符串描述一张牌,其中第一个字符描述其花色,第二个字符描述其点数。


输出格式

输出到文件 $  poker.out $  中。

输出一行一个整数,表示最少还需要向小 $ S $ 借几张牌才能凑成一副完整的扑克牌。


样例输入1

1
SA

样例输出1

51

样例输入2

4
DQ
H3
DQ
DT

样例输出2

49

样例3

见选手目录下的 $  poker/poker3.in  $ 与 $  poker/poker3.ans $ 。


提示

样例1解释

这一副牌中包含一张黑桃 $ A $ ,小 $ P $ 还需要借除了黑桃 $ A $ 以外的 $ 51 $ 张牌以构成一副完整的扑克牌。

样例2解释

这一副牌中包含两张方片 $  Q $ 、一张方片 $ T $ (方片 $ 10 $ )以及一张红桃 $ 3 $ ,小 $ P $ 还需要借除了红桃 $ 3 $ 、方片 $ T $ 和方片 $ Q $ 以外的 $  49 $ 张牌。

样例3解释

这一副扑克牌是完整的,故不需要再借任何牌。

该样例满足所有牌按照点数从小到大依次输入,点数相同时按照方片、草花、红桃、黑桃的顺序依次输入。

数据范围

对于所有测试数据,保证: $ 1≤n≤52 $ ,输入的 $ n $ 个字符串每个都代表一张合法的扑克牌,即字符串长度为 $  2 $ ,且第一个字符为 $ D\ C\ H\ S $ 中的某个字符,第二个字符为 $ A\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ T\ J\ Q\ K  $ 中的某个字符。

特殊性质 $ A $ :保证输入的 $ n $ 张牌两两不同。

特殊性质 $ B $ :保证所有牌按照点数从小到大依次输入,点数相同时按照方片、草花、红桃、黑桃的顺序依次输入。

代码运行状态:

输出