Skip to content
返回

【CSP-J 2024】 扑克牌

编辑页面

题目描述

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

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

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

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

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

输入格式

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

接下来 nn 行:

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

输出格式

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

输入输出样例 #1

输入 #1

1
SA

输出 #1

51

输入输出样例 #2

输入 #2

4
DQ
H3
DQ
DT

输出 #2

49

说明/提示

【样例 1 解释】

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

【样例 2 解释】

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

【样例 3 解释】

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

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

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

【数据范围】

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

::cute-table{tuack}

测试点编号nn \leq特殊性质
1111A
242\sim 45252^
575\sim 7^B
8108\sim 10^

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

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

题目分析

目的:求出最少还需要向小 S 借几张牌才能凑成一副完整的扑克牌。

共有52张牌,牌面信息由花色与点数组成,可以用字符串进行信息的存储。过程中可能存在重复的牌面,最终目标是凑出52张不同的牌面。相当于统计出输入的牌面中出现过的不同的牌面数量,用52减去这个数量就是最少还需要向小 S 借几张牌才能凑成一副完整的扑克牌。

关键点在于字符串的去重、统计,我们可以利用set来实现这一效果,将输入的排名信息存入set,利用size()获取不重复的元素数量。

代码实现

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 1e5 + 5;
set<string> st;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
	int n;
	string s;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s;
		st.insert(s);//
	}
	cout<<52-st.size();
  return 0;
}

编辑页面
分享这篇文章至:

上一篇
0x000c 【深基1.习6】鸡兔共笼
下一篇
0x0009 【深基1.习3】竞赛得分