洛谷P1104 生日

题目描述

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

输入格式

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

11 行为 OI 组总人数 nn

22 行至第 n+1n+1 行分别是每人的姓名 ss、出生年 yy、月 mm、日 dd

输出格式

输出共有 nn 行,

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

样例 #1

样例输入 #1

3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1

样例输出 #1

Luowen
Yangchu
Qiujingya

提示

数据保证,1<n<1001<n<1001s<201\leq |s|<20。保证年月日实际存在,且年份 [1960,2020]\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;
}