生日排序

生日排序


from jisuanke T1715
Time limit : 1000ms
Memory limit : 131072

题目描述:

蒜头学院开学了,老师要统计班里每个人的生日,并按照出生日期从早到晚排序。

输入格式:

第一行一个整数 n (1≤n≤100)n (1≤n≤100),班级班级的人数。

接下来 nn 行,每行包含一个字符串 ss 和三个整数 y,m,dy,m,d,表示姓名为 ss 的同学出生日期是 yy 年 mm 月 dd 日。

保证所有日期合法,姓名由小写字母构成,不超过 2020 个字符。

输出格式:

输出 nn 行,每行一个字符串表示姓名。如果有两个同学出生日期相同,输入靠后的同学先输出。

样例输入:

3
qwb 1996 6 30
gyt 1995 7 28
wc  1996 6 30

样例输出:

gyt
wc
qwb

sort:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Node {
    
    
	string name;	//名字
	int in;			//输入顺序
	int y, m, d;	//年月日
};
bool cmp(Node a, Node b) {
    
    
	if (a.y == b.y) {
    
    
		if (a.m == b.m) {
    
    
			if (a.d == b.d)
				return a.in > b.in;
			return a.d < b.d;
		}
		return a.m < b.m;
	}
	return a.y < b.y;
	//比较规则,这里自己好好思考一下,年小排在前,相等看月,再相等看日,再相同看输入顺序
}
int main() {
    
    
	int n; Node a;
	cin >> n;
	vector<Node> v;
	for (int i = 1; i <= n; ++i)
		cin >> a.name >> a.y >> a.m >> a.d, a.in = i, v.push_back(a);
	sort(v.begin(), v.end(), cmp);
	for (int i = 0; i < n; ++i)
		cout << v[i].name << endl;
	return 0;
}
priority_queue:
#include<iostream>
#include<queue>
using namespace std;
struct Node {
    
    
	string name;	//名字
	int in;			//输入顺序
	int y, m, d;	//年月日
};
struct cmp {
    
    
	bool operator()(Node a, Node b){
    
    
		if (a.y == b.y) {
    
    
			if (a.m == b.m) {
    
    
				if (a.d == b.d)
					return a.in < b.in;
				return a.d > b.d;
			}
			return a.m > b.m;
		}
		return a.y > b.y;
	}//比较规则,这里自己好好思考一下,年小排在前,相等看月,再相等看日,再相同看输入顺序
};
int main() {
    
    
	int n; Node a;
	cin >> n;
	priority_queue<Node, vector<Node>, cmp> q;
	for (int i = 1; i <= n; ++i)
		cin >> a.name >> a.y >> a.m >> a.d, a.in = i, q.push(a);
	for (int i = 0; i < n; ++i)
		cout << q.top().name << endl, q.pop();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45985728/article/details/113443202