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;
}