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

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 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
思路
  • 本来的思路是用vector存储每一个信息,最后排序输出,但是遇到了段错误,后来改用《算法笔记上机训练实战指南》里面的方法
  • 注意两个点:①日期比较要写2种,不然边界日期比较会出问题。②所有人的出生日期都不合法就输出0
代码
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
string name;
int year, month, day;
}oldest, youngest, l, r; void Init()
{
youngest.year = l.year = 1814;
oldest.year = r.year = 2014;
youngest.month = oldest.month = l.month = r.month = 9;
youngest.day = oldest.day = l.day = r.day = 6;
} bool less2(node a, node b)
{
if(a.year != b.year)
return a.year <= b.year;
else if(a.month != b.month) return a.month <= b.month;
else return a.day <= b.day;
} bool more2(node a, node b)
{
if(a.year != b.year)
return a.year >= b.year;
else if(a.month != b.month) return a.month >= b.month;
else return a.day >= b.day;
} int main()
{
int n;
cin >> n;
Init(); node tmp;
int num = 0;
while(n--)
{
cin >> tmp.name;
scanf("%d/%d/%d", &tmp.year, &tmp.month, &tmp.day);
if(less2(tmp, r) && more2(tmp , l))
{
num++;
if(less2(tmp, oldest)) oldest = tmp;
if(more2(tmp, youngest)) youngest = tmp;
}
}
if(num == 0)
cout << "0" << endl;
else cout << num << " " << oldest.name << " " << youngest.name;
return 0;
}
引用

https://pintia.cn/problem-sets/994805260223102976/problems/994805293282607104

PTA(Basic Level)1028.人口普查的更多相关文章

  1. PTA(Basic Level)1006.Sign In and Sign Out

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  2. PAT (Basic Level) Practise (中文)-1028. 人口普查(20)

    PAT (Basic Level) Practise (中文)-1028. 人口普查(20)   http://www.patest.cn/contests/pat-b-practise/1028 某 ...

  3. P 1028 人口普查

    转跳点:

  4. PAT乙级 1028. 人口普查(20)

    1028. 人口普查(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 某城镇进行人口普查,得到了全体居民的 ...

  5. PAT-乙级-1028. 人口普查(20)

    1028. 人口普查(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 某城镇进行人口普查,得到了全体居民的 ...

  6. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)

    1028 人口普查(20)(20 分) 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的--假设已知镇上没有超 ...

  7. PATB 1028. 人口普查(20)

    1028. 人口普查(20) 注意特判合理人数为0,否则格式错误.很暴力的sort排序找出最大最小. 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Stan ...

  8. PAT(B) 1028 人口普查(C)字符串

    题目链接:1028 人口普查 (20 point(s)) 题目描述 某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是 ...

  9. 来自PTA Basic Level的三只小野兽

    点我阅读原文 最近利用闲暇时间做了一下 PTA Basic Level[1] 里的题,里面现在一共有 95 道题,这些题大部分很基础,对于刷倦了 leetcode 的小伙伴可以去里面愉快的玩耍哦. 这 ...

随机推荐

  1. 十进制数转N进制c++实现

    编写一个算法,将一个非负的十进制整数N转换为另一个基数为B的B进制整数. #include <iostream> #include<string.h> using namesp ...

  2. HDU4135 Co-prime

    题目链接:Click here Solution: 简单容斥,我们先把\(N\)分解质因数,我们知道\(1\sim x\)里能整除\(i\)的数的个数为\(\lfloor \frac{x}{i} \r ...

  3. Java集合框架系列大纲

    ###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...

  4. JavaWeb-SpringBoot_使用MySQL管理用户登录注册+接入腾讯短信SDK_demo

    使用Gradle编译项目 传送门 项目已托管到Github上 传送门 JavaWeb-SpringBoot_一个类实现腾讯云SDK发送短信 传送门 用户注册 用户并非一定要输入正确的手机验证码去激活当 ...

  5. [CSP-S模拟测试]:Weed(线段树)

    题目描述 $duyege$的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹.为了查出真相,$duyege$准备修好电脑之后再进行一次金坷垃的模拟实验.电脑上面有若干层金坷垃,每次只能在上面撒上一层高度 ...

  6. python3中的heapq模块使用

    heapq-堆排序算法 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 二叉树 树中每个节点至多有两个子节点 满二叉树 树中除了叶子节点,每个节点都有两个子节点 什么是完全二叉 ...

  7. websocket聊天体验

    light-example-4j/websocket目录有client-to-server.peer-to-peer两个示例项目,解决了我的两个问题:在线聊天.日志查看. 在线聊天,后续可以支持:最近 ...

  8. java连接mysql出现The server time zone value '�й���׼ʱ��' is unrecognized or represents more than...

    在连接的配置文件中,指定数据库位置的末尾加上serverTimezone=UTC ```yml url: jdbc:mysql://localhost:3306/app?serverTimezone= ...

  9. LeetCode 86. 分隔链表(Partition List)

    题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...

  10. WebSocket-java实现

    一.所需jar 二.创建websocket.jsp(注意此页面链接,需要链接到自己的服务) <%@ page language="java" import="jav ...