zoukankan      html  css  js  c++  java
  • 【算法笔记】B1028 人口普查

    1028 人口普查 (20 分)

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

    这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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

    思路:

    读入日期时判断是否是合法日期,如果是,令num++,再与oldest、youngest比较,然后更新。

    注意如果合法日期个数为0的情况,如果漏掉这个情况会多输出空格导致测试点3格式错误。

    CODE:

    #include<iostream>
    #include<string>
    using namespace std;
    
    struct person{
        char name[10];
        int y, m, d;
    }oldest, youngest, _left, _right, temp;
    
    bool lessEqu(person a, person b){
        if(a.y != b.y) return a.y < b.y;
        else if(a.m != b.m) return a.m < b.m;
        else return a.d <= b.d;
    }
    
    bool moreEqu(person a, person b){
        if(a.y != b.y) return a.y > b.y;
        else if(a.m != b.m) return a.m > b.m;
        else return a.d >= b.d;
    }
    
    int main(){
        youngest.y = _left.y = 1814;
        oldest.y = _right.y = 2014;
        oldest.m = youngest.m = _left.m = _right.m = 9;
        oldest.d = youngest.d = _left.d = _right.d = 6;
        int n,num = 0;
        scanf("%d", &n);
        for(int i = 0; i < n; i ++){
            
            scanf("%s %d/%d/%d", &temp.name, &temp.y, &temp.m, &temp.d);
            if(moreEqu(temp, _left) && lessEqu(temp, _right)){
                num++;
                if(lessEqu(temp, oldest)) oldest = temp;
                if(moreEqu(temp, youngest)) youngest = temp;
            }
        }
        if(num == 0) printf("0
    ");
        else 
            printf("%d %s %s
    ", num, oldest.name, youngest.name);
        return 0;
    }
  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10531152.html
Copyright © 2011-2022 走看看