CSP-J2024 T1(poker/扑克)题解

洛谷CSP-J 2024自测指路


前情提要:虽然洛谷讨论区里大多数都是倾向用哈希解决该题,但实际上可以用一些邪门小技巧来A这道题awa


先来读题。

题目中说小 P 想知道他至少得向小 S 借多少张牌,才能让从小 S 和小 Q 借来的牌中,可以选出52张牌构成一副完整的扑克牌。

题目说了是求至少要借多少牌,而扑克牌总共只有 \(52\) 种,这意味着我们当下若有 \(x\) 牌,那么只需要再借 \(52-x\) 张牌即可。

面对可能出现的花色重复的扑克牌,我们可以使用set容器的特性去重。

考虑时间复杂度,set的复杂度是 \(O(log\ n)\) ,而输入时的循环则是 \(O(n)\),在该题中 \(n≤52\) ,时间限制则为 \(1000\ ms\),所以思路可行。

实现代码如下:

#include<bits/stdc++.h>//伟大的万能头
using namespace std;
set<string>st;//去重用的set容器
int main(){
	//By Chengliye
	int n;
	cin>>n;
	while(n--){
		string str;
		cin>>str;//输入花色
		st.insert(str);//将花色添加至st中,若已存在该花色则不添加
	}
	cout<<52-st.size();//st.size()代表已经借到的卡牌种类数量
	return 0;
} 

若有错漏,欢迎指出。

posted @ 2024-10-30 13:45  chengliye  阅读(69)  评论(0编辑  收藏  举报

点击按钮复制文本

https://www.cnblogs.com/chengliye。