题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104
分析:题目不难,注意的是,如果sum=0是没有名字输出的。写这个博客主要是在网上搜到一个小技巧在这上面的应用;
代码
#include<iostream>
using namespace std;
#include<cstring>
#include<string>
#include<cctype>
#include<cmath>
#include<vector>
//#include<algorithm>
struct people
{
char a[10];
int year;
char c1;
int month;
char c2;
int day;
}peo[100005];
int max1=2014*10000+900+6; //转换,把年月日的差距拉大,不会相互影响大小
int min1=1814*10000+900+6;
int main()
{
int n;
cin>>n;
int sum=0;
int maxx=-1,minn,k,l;
minn=max1+22;
for(int i=0;i!=n;++i)
{
scanf("%s %d %c %d %c %d",&peo[i].a,&peo[i].year,&peo[i].c1,&peo[i].month,&peo[i].c2,&peo[i].day);
//这里改scanf ,cin可能超时;这里的c1,c2没有必要,可以直接 %d/%d/%d
int temp=peo[i].year*10000+peo[i].month*100+peo[i].day;
if(temp>=min1&&temp<=max1)
{
if(maxx<=temp)
maxx=temp,k=i;
if(minn>=temp)
minn=temp,l=i;
++sum;
}
}
cout<<sum;
if(sum!=0)
cout<<" "<<peo[l].a<<" "<<peo[k].a;
return 0;
}