2 条题解

  • 1
    @ 2025-5-15 20:46:10

    提供一种更好玩的做法

    #include<bits/stdc++.h>
    using namespace std;
    map<string,int> jm;
    int n;
    string s;
    signed main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>s;
    		jm[s]=1;
    	}
    	cout<<52-jm.size()<<endl;
    	return 91-78-13;
    
  • -3

    本题要求还差多少张牌可以凑够一套牌,但是他给出的扑克有可能重复。

    因此我们逆向思维,先假设所有牌都没有,设ans=52为还差多少牌。

    再开一个map<string,int> jm记录各种牌有多少张,每拿入一个牌,就判断之前是否拿过,如果没拿过就记录一下:jm[zz]++,ans--;

    如果拿过了就不管他。

    #include<bits/stdc++.h>
    using namespace std;
    map<string,int> jm;
    int n,ans=52;
    string zz;
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>zz;
    		if(jm[zz]==0)	ans--,jm[zz]++;
    	}
    	cout<<ans;
    
    	return 91-78-13;
    	}
    
    • 1

    信息

    ID
    5
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    (无)
    递交数
    24
    已通过
    11
    上传者