题目中“然后在第二行输出最年长的校友的身份证号” ,意思是不来参加校庆的校友也算在内吗?
我改了一下输入样例:
5
372928196906118710
610481197806202213
440684198612150417
13072819001002001X
150702193604190912
6
530125197901260019
150702193604190912
220221196701020034
610481197806202213
440684198612150417
370205198709275042
运行满分的代码得到的输出结果是:
3
13072819001002001X
所以题目的意思就是单纯求一下所有的校友中最年长的
#include<bits/stdc++.h>
using namespace std;
unordered_map<string,int> List;
struct node{
string s;
int year;
int month;
int day;
};
bool compare(const node &x1,const node &x2){
if(x1.year!=x2.year)
return x1.year<x2.year;
else if(x1.month!=x2.month)
return x1.month<x2.month;
else
return x1.day<x2.day;
}
int n,m,cnt=0;
int main(){
cin>>n;//所有的校友
vector<node> x;
vector<node> laibin;
getchar();
for(int i=0;i<n;i++){
string sss;
getline(cin,sss);
List[sss] = 1;
int y = stoi(sss.substr(6,4));
int m = stoi(sss.substr(10,2));
int d = stoi(sss.substr(12,2));
x.push_back(node{sss,y,m,d});
}
cin>>m;
getchar();
for(int i=0;i<m;i++){
string ss;
getline(cin,ss);
int y = stoi(ss.substr(6,4));
int m = stoi(ss.substr(10,2));
int d = stoi(ss.substr(12,2));
if(List[ss]){
cnt++;
}
else{
laibin.push_back(node{ss,y,m,d});
}
}
cout<<cnt<<endl;
if(cnt!=0){
sort(x.begin(),x.end(),compare);
cout<<x[0].s<<endl;
}else{
sort(laibin.begin(),laibin.end(),compare);
cout<<laibin[0].s<<endl;
}
}