【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;
}
相关推荐
_F_y3 小时前
MySQL用C/C++连接
c语言·c++·mysql
兩尛3 小时前
c++知识点2
开发语言·c++
fengfuyao9853 小时前
海浪PM谱及波形的Matlab仿真实现
开发语言·matlab
xiaoye-duck4 小时前
C++ string 底层原理深度解析 + 模拟实现(下)——面试 / 开发都适用
开发语言·c++·stl
Azure_withyou4 小时前
Visual Studio中try catch()还未执行,throw后便报错
c++·visual studio
琉染云月4 小时前
【C++入门练习软件推荐】Visual Studio下载与安装(以Visual Studio2026为例)
c++·visual studio
Hx_Ma165 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode5 小时前
原子操作类LongAdder
java·开发语言
L_09076 小时前
【C++】高阶数据结构 -- 红黑树
数据结构·c++
A_nanda6 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程