PAT|1028 人口普查(简单模拟)

注意点:1.最年长人的出生日期是1814/9/6 

               2.最年轻人的出生日期是2014/9/6 

               3.存在输入样例均不在合理日期内 应只输出0

思路:将符合条件的加入进结构体数组中,并对他们进行排序,输出最大最小即可。

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn = 0x3f3f3f3f;
typedef long long ll;
struct Node{
    string a;
    int b,c,d;
}w[100005];
bool cmp(Node p,Node q) {
    if(p.b != q.b) return p.b < q.b;
    if(p.c != q.c) return p.c < q.c;
    if(p.d != q.d)  return p.d < q.d;
    return p.a < q.a;
}
int main() {
    int n;
    cin >> n;
    string a;
    int b,c,d;
    int t = 0;
    for(int i = 1; i <= n; i++) {
        cin >> a;
        scanf("%d/%d/%d",&b,&c,&d);

        if((b == 2014 && c == 9 && d >6) || (b == 1814 && c == 9 && d < 6) || (b == 2014 && c > 9 ) ||(b > 2014) ||(b == 1814 && c < 9)||(b < 1814)) {
                continue;
        }
        else {
            w[t].a = a;
            w[t].b = b;
            w[t].c = c;
            w[t++].d = d;
        }
        //
    }
    sort(w,w+t,cmp);
    cout << t;
    if(t != 0)
    cout << " " << w[0].a << " " << w[t-1].a<<endl;
    return 0;
}

你可能感兴趣的:(PAT|1028 人口普查(简单模拟))