CSP-J 2024 T1
我们注意到输入的牌字符串肯定是合法的,那么这题就变成了一个去重问题。
两种方法:
std::unique
std::unique 可以对一个有序的序列去重,并且将重复的放在末尾,具体的, unique 会返回去重后这个序列的末指针。
那么我们将所有牌用 sort 排序后用一遍 unique 即可。
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int n;
string s[N];
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>s[i];
sort(s+1,s+n+1);
n=unique(s+1,s+n+1)-s-1;
cout<<52-n;
return 0;
}
std::map
我们可以用内置平衡树的 map 来实现,不会的可以百度。
我们就可以用 map<string,bool> mp 来将一个字符串映射成一个 bool 型,而在代码的最后调用 mp.size() 即可返回有多少张本质不同的卡牌。
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int n;
string s[N];
map<string,bool> mp;
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
mp[s[i]]=1;
}
cout<<52-mp.size();
return 0;
}
- 暴力