5035: 人口普查
可以把每个日期转换成一个整数来比较,因为题目说不会有并列,所以没什么问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define ll long long int
using namespace std;
struct people{ //用结构体存储人信息
char name[6];
int year;
int month;
int day;
}p[100001];
int main(int argc, char const *argv[])
{
int N;
int t1=0; //年龄最小人
int t2=0; //年龄最大的人
scanf("%d",&N);
ll min=99999999999; //初始化min和max大小
ll max=-1;
int win=N; //win为有效的个数
for(int i=0;i<N;i++){
scanf("%s",p[i].name);
scanf("%d/%d/%d",&p[i].year,&p[i].month,&p[i].day);
ll t=p[i].year*10000+p[i].month*100+p[i].day; //把日期转为整数
if(t>20140906 || t<18140906){win--;continue;}
if(t<min && (t<=20140906 && t>=18140906)){ //如果是有效年龄则比较大小
t1=i;
min=t;
}
if(t>max && (t<=20140906 && t>=18140906)){
max=t;
t2=i;
}
}
if(win!=0){
printf("%d ",win);
printf("%s %s\n",p[t1].name,p[t2].name);
}
else printf("0\n"); //注意如果有效人数为0,则输出0
return 0;
}