#include<stdio.h>
//考虑到可能有同年不同月不同日的人,也要进入比较大小,所以用结构体,输入时忽略/字符,结构体又4个子元素组成
//一个很重要的点,应该写一个比较日期大小的函数,因为判断边界要用,等下比较谁大谁小还要用。我一开始没想到只想着想一步写一步
//第二次提交能通过编译,但是只有一个1分的测试点是答案正确
//后终于ac了!3 Tom John最是我把日期大小和年龄大小弄混了,在主函数中比较时一时思维没转换过来!纠结了我一个下午!
//#define LOCAL
struct Person{
char pname[7];//我一开始把中括号写到前面了,就不对。。
int yy,mm,dd;//三个变量
}oldest,youngest,temp,left,right;
//left 和right分别放合法日期的左右边界
bool LessEqu(struct Person a,struct Person b){//注意是日期大小,而不是年龄大小
if(a.yy!=b.yy) return a.yy<=b.yy;
else if(a.mm!=b.mm) return a.mm<=b.mm;
else return a.dd<=b.dd;//不太懂啊这个
}
bool MoreEqu(struct Person a,struct Person b){//注意是日期大小,而不是年龄大小!!等会比较要注意
if(a.yy!=b.yy) return a.yy>=b.yy;
else if(a.mm!=b.mm) return a.mm>=b.mm;
else return a.dd>=b.dd;
}
void init(){
//youngest与left为1814年9月6日,oldest与right为2014年9月6日
youngest.yy=left.yy=1814;//这里好像书上写错了,后来发现是自己写错了
oldest.yy=right.yy=2014;
youngest.mm=left.mm=oldest.mm=right.mm=9;
youngest.dd=left.dd=oldest.dd=right.dd=6;//后来总是显示2个,后来发现这里数字写错了
}
int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
//突然发现了原因!在主函数中没有对边界和最大最小进行初始化直接就比较了!
init();
int n,count=0;
scanf("%d",&n);
while(n--){
scanf("%s%d/%d/%d",&temp.pname,&temp.yy,&temp.mm,&temp.dd);//第三次犯这个错误,导致内存无法读取
//先判断是否合理,合理的话自增1,然后继续进行比较,否则到此终止
if(LessEqu(temp,right)&&MoreEqu(temp,left)){
count++;
if(MoreEqu(temp,youngest))//一开始这里写成了MoreEqu,把日期大小和年龄大小弄混了!
youngest=temp;
if(LessEqu(temp,oldest))//一开始这里写成了MoreEqu,把日期大小和年龄大小弄混了!
oldest=temp;
}
}
if(count==0) printf("0\n");//不用担心个数为1时会怎么样,因为已经有交换,所以如果是1就输出两次那一个
//输出绝对有问题
else printf("%d %s %s\n",count,oldest.pname,youngest.pname);//这样写输出结果3 Tom
/*else{
printf("%d",count);
printf(" %s",oldest.pname);
printf(" %s\n",youngest.pname);
}*/
return 0;
}