1028 人口普查 (20 分)
题目链接
算法分析
题目不难,但要求比较繁琐,具体看代码吧。
代码实现
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
#define N 100010
struct ss{
char name[10];
int year, month, day;
};
struct ss man[N], M[N];
int t;
bool judge(int x){
if(man[x].year < 1814) return 0;
else if(man[x].year == 1814){
if(man[x].month < 9) return 0;
else if(man[x].month == 9){
if(man[x].day < 6) return 0;
else if(man[x].day == 6) return 1;
}
}
if(man[x].year > 2014) return 0;
else if(man[x].year == 2014){
if(man[x].month > 9) return 0;
else if(man[x].month == 9){
if(man[x].day > 6) return 0;
else if(man[x].day == 6) return 1;
}
}
return 1;
}
bool cmp(ss a, ss b){
if(a.year < b.year) return 1;
else if(a.year > b.year) return 0;
else{
if(a.month < b.month) return 1;
else if(a.month > b.month) return 0;
else{
if(a.day < b.day) return 1;
else if(a.day > b.day) return 0;
else return 1;
}
}
}
int main(){
int n;
scanf("%d", &n);
char s;
for(int i = 1; i <= n; ++ i){
scanf("%s %d%c%d%c%d", man[i].name, &man[i].year, &s, &man[i].month, &s, &man[i].day);
if(judge(i)){
++ t;
M[t] = man[i];
}
}
sort(M + 1, M + t + 1, cmp);
printf("%d", t);
if(t != 0) printf(" %s %s", M[1].name, M[t].name);
return 0;
}