P11227 [CSP-J 2024] 扑克牌 题解

· · 题解

闲话

本蒟蒻的第一篇题解,对萌新非常友好。

题目传送门

今年 CSP-J 第一(送分)题,不少大佬不到 5min 就 AC 了。

考后讨论发现很多人采用桶排序、set 等高级算法,其实此题简单的思路就能过。

题目概述

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

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

做法很简单,大致思路:

总牌数-(小~P~拥有的牌数 - 重复的牌数)

本题解采用 sort 寻找重复牌数。

代码:

#include<bits/stdc++.h>//懒人头文件 
using namespace std;
int n;
string a[55];
int main(){
    cin >> n;
    int cnt = 0;//用来记录重复牌数 
    for(int i = 1; i <= n; i++) cin >> a[i];
    sort(a + 1, a + n + 1);//让相同的牌相邻,方便判断 
    for(int i = 1; i <= n; i++){
        if(a[i] == a[i + 1]) cnt++;//如果两张牌相同,cnt记录 
    }
    cout << 52 - n + cnt;//即 总牌数-(小P拥有的牌数 - 重复的牌数) 
    return 0;//完结撒花 
} 

恭喜又拿到100pts,离省一又近了一步。

PS:修改记录: