洛谷P1104 生日

2023 / 10 / 30

题目描述

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

输入格式

输入共有 $n + 1$ 行,

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

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

输出格式

输出共有 $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\leq |s|<20$。保证年月日实际存在,且年份 $\in [1960,2020]$。

题解

#include <bits/stdc++.h> using namespace std; int n; struct stu { string name; int y; int m; int d; int t; } a[110]; bool cmp(stu x, stu y) { if (x.y != y.y) return x.y < y.y; else { if (x.m != y.m) return x.m < y.m; else if (x.d != y.d) return x.d < y.d; else return x.t > y.t; } } int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> a[i].name >> a[i].y >> a[i].m >> a[i].d; a[i].t = i; } sort(a, a + n, cmp); for (int i = 0; i < n; i++) cout << a[i].name << endl; return 0; }