(思维)1028. 人口普查(20)

1028. 人口普查(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。

输出格式:

在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。

输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:

3 Tom John

题解 :抗点:如果输入的都不符合条件,需要输出0;

未ac代码:问题在于边界没能处理好!

测试点 结果 用时(ms) 内存(kB) 得分/满分
0 答案正确 14 23904 12/12
1 答案正确 15 23656 2/2
2 答案正确 15 23784 1/1
3 答案正确 15 23680 1/1
4 段错误 117 26860 0/4

#include<stdio.h>
#include<string.h>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
string s;
int a,b,c;

struct fun{
  string s;
  int a,b,c;
}f[1000005];

bool cmp(fun x,fun y){
  if(x.a!=y.a){
    return x.a<y.a;
  }
  else if(x.b!=x.b){
    return x.b<y.b;
  }
  else if(x.c!=x.c)
   return x.c<x.c;
}
int main(){
  int n;
  scanf("%d",&n);
  int p=0;
  for(int i=0;i<n;i++){
    cin>>s;
    scanf("%d/%d/%d",&a,&b,&c);
    if(a>1814&&a<2014){
      f[p].s=s;
      f[p].a=a;
      f[p].b=b;
      f[p].c=c;
      p++;
    }
    else if(a==1814){
      if(b>9){
        f[p].s=s;
          f[p].a=a;
          f[p].b=b;
          f[p].c=c;
          p++;
      }
      else if(b==9){
        if(c>=6){
          f[p].s=s;
              f[p].a=a;
              f[p].b=b;
              f[p].c=c;
              p++;
        }
      }
    }
    else if(a==2014){
      if(b<9){
        f[p].s=s;
          f[p].a=a;
          f[p].b=b;
          f[p].c=c;
          p++;
      }
      else if(b==9){
        if(c<=6){
          f[p].s=s;
              f[p].a=a;
              f[p].b=b;
              f[p].c=c;
              p++;
        }
      }
    }
  }
  sort(f,f+p,cmp);
  if(p>0){
  printf("%d ",p);
  cout<<f[0].s<<" "<<f[p-1].s<<endl;
}
  else
   printf("0\n");
  return 0;
}

ac代码:

#include<stdio.h>
#include<string.h>
#include<map>
#include<algorithm>
#include<iostream>
using namespace std;
string s;
int a,b,c;

struct fun{
  string s;
  long long sum;
}f[100005];

bool cmp(fun x,fun y){
  return x.sum<y.sum;
}
int main(){
  int n;
  scanf("%d",&n);
  int p=0;
  long long ma=20140906;
  long long mi=18140906;
  for(int i=0;i<n;i++){
    cin>>s;
    scanf("%d/%d/%d",&a,&b,&c);
      long long ss=a*10000+b*100+c;
      if(ss>=mi&&ss<=ma){
        f[p].s=s;
        f[p].sum=ss;
        p++;
    }
  }
  sort(f,f+p,cmp);
  if(p>0){
  printf("%d ",p);
  cout<<f[0].s<<" "<<f[p-1].s<<endl;
}
  else
   printf("0\n");
  return 0;
}

猜你喜欢

转载自blog.csdn.net/black_horse2018/article/details/79587964
今日推荐