【C++ 真题】P1104 生日

P1104 生日

题目描述

cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。

输入格式

输入共有 n + 1 n + 1 n+1 行,

第 1 1 1 行为 OI 组总人数 n n n;

第 2 2 2 行至第 n + 1 n+1 n+1 行分别是每人的姓名 s s s、出生年 y y y、月 m m m、日 d d d。

输出格式

输出共有 n n n 行,

即 n n n 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

输入输出样例 #1

输入 #1

复制代码
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

输出 #1

复制代码
Luowen
Yangchu
Qiujingya

说明/提示

数据保证, 1 < n < 100 1<n<100 1<n<100, 1 ≤ ∣ s ∣ < 20 1\leq |s|<20 1≤∣s∣<20。保证年月日实际存在,且年份 ∈ [ 1960 , 2020 ] \in [1960,2020] ∈[1960,2020]。

##题解

cpp 复制代码
#include "bits/stdc++.h"
using namespace std;
const int N = 1e2+7;
int n;

struct Node{
	string s;
	int y, m, d, id;
}g[N];

bool cmp(Node a, Node b){
	if(a.y != b.y) return a.y < b.y;
	else if(a.m != b.m) return a.m < b.m; 
	else if(a.d != b.d) return a.d < b.d;
	else return a.id > b.id;
} 

int main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>g[i].s>>g[i].y>>g[i].m>>g[i].d;
		g[i].id = i;
		
	}
	sort(g+1, g+1+n, cmp);
	for(int i=1;i<=n;++i){
		cout<<g[i].s<<endl;
	} 
	
	return 0;
}
相关推荐
金融数据出海几秒前
黄金金融期货数据API对接技术文档
开发语言·金融·github
诗书画唱16 分钟前
【前端教程】JavaScript 实现图片鼠标悬停切换效果与==和=的区别
开发语言·前端·javascript
岁忧18 分钟前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
一枝小雨26 分钟前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
一枝小雨26 分钟前
【C++】Vector完全指南:动态数组高效使用
开发语言·c++·笔记·vector·学习笔记·std库
诗书画唱35 分钟前
【前端教程】JavaScript DOM 操作实战案例详解
开发语言·前端·javascript
Tisfy37 分钟前
LeetCode 3516.找到最近的人:计算绝对值大小
数学·算法·leetcode·题解
自信的小螺丝钉38 分钟前
Leetcode 206. 反转链表 迭代/递归
算法·leetcode·链表
buyutang_1 小时前
C/C++ Linux系统编程:线程控制详解,从线程创建到线程终止
linux·c语言·c++·学习
jiaway1 小时前
【C语言】第一课 环境配置
c语言·开发语言