PTA B1100 校庆 C++

题目描述

2019 年浙江大学将要庆祝成立 122 周年。为了准备校庆,校友会收集了所有校友的身份证号。现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。

输入格式

输入在第一行给出不超过 10 5 的正整数 N,随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母X组成的字符串)。题目保证身份证号不重复。

随后给出前来参加校庆的所有人士的信息:首先是一个不超过 10 5 的正整数 M,随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。

输出格式

首先在第一行输出参加校庆的校友的人数。然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7-14 位给出的是 yyyymmdd 格式的生日。如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。

样例 #1

样例输入 #1

5
372928196906118710
610481197806202213
440684198612150417
13072819571002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042

样例输出 #1

3
150702193604190912

C++

#include<bits/stdc++.h>

using namespace std;

signed main() {
    int n;
    cin>>n;
    //用set存所有校友的身份证
    set<string> s;
    string ans;
    //是否有校友参会 true代表否
    bool flag=true;
    //出生日期 用char大小比较,Z比较大,做初始化变量
    string d="ZZZZZZZZ";
    while(n--) {
        string t;
        cin>>t;
        s.insert(t);
    }
    cin>>n;
    int cnt=0;
    while(n--) {
        //读入每一个参会人
        string y;
        cin>>y;
        //如果日期小于上一个日期,并且是校友
        if(y.substr(6,8)<d and s.count(y)!=0) {
            d=y.substr(6,8);
            flag=false;
            ans=y;
        }else if(y.substr(6,8)<d) {
            d=y.substr(6,8);
            ans=y;
        }
        //是校友 cnt+=1
        if(s.count(y)!=0) cnt++;
    }
    cout<<cnt<<"\n"<<ans;
    return 0;
}

添加新评论