PAT(Basic Level) Practice : 1028 人口普查 (20分)
1028 人口普查 (20分)
运行超时
读取的时候“2014/06/07”不要当作一个字符串来读取,而是用scanf("%d/%d/%d", )来读取
每一次读取输入都要做一次判断
代码
#include <iostream>
#include"stdlib.h"
#include <vector>
#include <cstdio>
//scanf printf防止超时
#include <algorithm>
//vector的sort
#include <sstream>
//转换
using namespace std;
#include<iomanip>
//精度
#include<cmath>
//round四舍五入取整
#include <string.h>
class people
{
public:
char name[6];
int y;
int m;
int d;
};
int main()
{
int num;
scanf("%d",&num);
people a,max,min;
max.y=2014;max.m=9;max.d=7;
min.y=1814;min.m=9;min.d=5;
int cnt=0;
for(int i=0;i<num;i++)
{
scanf("%s %d/%d/%d",&a.name,&a.y,&a.m,&a.d);
cnt++;
if(a.y>2014||(a.y==2014&&a.m>9)||(a.y==2014&&a.m==9&&a.d>6)||a.y<1814||(a.y==1814&&a.m<9)||(a.y==1814&&a.m==9&&a.d<6))
{
cnt--;
continue;
}
if(a.y<max.y||(a.y==max.y&&a.m<max.m)||(a.y==max.y&&a.m==max.m&&a.d<max.d))
{
max=a;
}
if(a.y>min.y||(a.y==min.y&&a.m>min.m)||(a.y==min.y&&a.m==min.m&&a.d>min.d)){
min=a;
}
}
printf("%d",cnt);
if(cnt!=0)
{
printf(" %s %s",max.name,min.name);
}
return 0;
}