PAT(乙级)2019年春季考试 7-5 校庆

mac2022-06-30  26

 题目中“然后在第二行输出最年长的校友的身份证号” ,意思是不来参加校庆的校友也算在内吗?

我改了一下输入样例:

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

 

最新回复(0)