1028. ⼈⼝普查
某城镇进⾏⼈⼝普查,得到了全体居⺠的⽣⽇。现请你写个程序,找出镇上最年⻓和最年轻的⼈。这 ⾥确保每个输⼊的⽇期都是合法的,但不⼀定是合理的——假设已知镇上没有超过200岁的⽼⼈,⽽今 天是2014年9⽉6⽇,所以超过200岁的⽣⽇和未出⽣的⽣⽇都是不合理的,应该被过滤掉。
输⼊格式:
输⼊在第⼀⾏给出正整数N,取值在(0, 10^5];随后N⾏,每⾏给出1个⼈的姓名(由不超过5个英⽂字 ⺟组成的字符串)、以及按“yyyy/mm/dd”(即年/⽉/⽇)格式给出的⽣⽇。题⽬保证最年⻓和最年轻 的⼈没有并列。
输出格式:
在⼀⾏中顺序输出有效⽣⽇的个数、最年⻓⼈和最年轻⼈的姓名,其间以空格分隔。
输⼊样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:
3 Tom John
分析:
生日应该在"1814/09/06"到"2014/09/06"之间,如果符合要求,cnt++,用minname和maxname来存放答案。如果birth>=maxbrith,就更新maxname和maxbirth,min同理。
最后,如果cnt不等于0,就输出他们的姓名
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;cin>>n;
int cnt=0;
string name,birth,maxname,minname;
string maxbirth="1814/09/06",minbirth="2014/09/06";
for(int i=0;i<n;i++){
cin>>name>>birth;
if(birth>="1814/09/06"&&birth<="2014/09/06"){
cnt++;
if(birth>=maxbirth){
maxbirth=birth;
maxname=name;
}
if(birth<=minbirth){
minbirth=birth;
minname=name;
}
}
}
cout<<cnt;
if(cnt!=0) cout<<" "<<minname<<" "<<maxname;
return 0;
}