#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct STU
{
char mname[10];
int y,m,d;
}tmp,old,young,left,right;
void init()
{
old.y=right.y=2014;
young.y=left.y=1814;
old.m=right.m=young.m=left.m=9;
old.d=right.d=young.d=left.d=6;
}
bool isless2014(STU a,STU b) //判断是否超过2014,9,6 判断a是不是小于b
{
if(a.y!=b.y)
return a.y<=b.y;
else
if(a.m!=b.m)
return a.m<=b.m;
else
return a.d<=b.d;
}
bool ismore1814(STU a, STU b) //判断是否不到1814,9,6 判断a有没有超过b
{
if(a.y!=b.y)
return a.y>=b.y;
else
if(a.m!=b.m)
return a.m>=b.m;
else
return a.d>=b.d;
}
int main()
{
init();
int n;
scanf("%d",&n);
int num=0;
for(int i=0 ; i<n ; ++i) //输入一个,判断一个。不需要存储后排序
{
scanf("%s %d/%d/%d",&tmp.mname,&tmp.y,&tmp.m,&tmp.d);
if(isless2014(tmp,right) && ismore1814(tmp,left)) //判断合法性
{
++num;
if(isless2014(tmp,old)) //tmp比old更早,更新old
old=tmp;
if(ismore1814(tmp,young)) //tmp比young更晚,更新young
young=tmp;
}
}
if(num==0) //【warning】可能全部都不合法,输出0
printf("0");
else
printf("%d %s %s",num,old.mname,young.mname);
system("pause");
return 0;
}
/*失败的方式,判断边界十分复杂
bool cmp(STU a,STU b) //【skill】使用sort函数自己构造比较
{
if(a.y!=b.y) //按年月日大小排序
return a.y>b.y;
else
if(a.m!=b.m)
return a.m>b.m;
else
return a.d>b.d;
}
STU arr[100050];
int main()
{
memset(arr,0,sizeof(arr));
int n;
scanf("%d",&n);
for(int i=0 ; i<n ; ++i)
{
scanf("%s %d/%d/%d",&arr[i].mname,&arr[i].y,&arr[i].m,&arr[i].d);
}
sort(arr,arr+n,cmp);
STU old,young;
int tag=0,sum=0,last=-1;
for(int i=0 ; i<n ; ++i) //找最老
{
if(arr[i].y<1814)
else
{
if(arr[i].m>=9)
if(arr[i].d>=6)
if(arr[i].y<=2014)
if(arr[i].m<=9)
if(arr[i].d<=6)
{
if(0==tag)
{
strcpy(old.mname,arr[i].mname); //其实这里是young
tag=1;
}
++sum;
last=i;
}
}
printf("%d %s %s",sum,old.mname,arr[last].mname);
*/