璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:luogup1104
problems
名称生日
题目编号P1104
题目链接luogu.com.cn/…
来源Luogu
算法分类入门_字符串, 排序
难易程度容易

生日

想法

多关键词排序。

代码实现

方法一:使用String类

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct node{
	int y, m, d, sit;
	string str;
	friend bool operator<(const node a, const node b) {
		return a.y < b.y 
			|| (a.y == b.y && a.m < b.m) 
			|| (a.y == b.y && a.m == b.m && a.d < b.d)
			|| (a.y == b.y && a.m == b.m && a.d == b.d && a.sit > b.sit);
	}
};
node line[110];
 
int main() {
	int n;
	cin >> n;
	for(int i = 0; i < n; i++) {
		cin >> line[i].str >> line[i].y >> line[i].m >> line[i].d;
		line[i].sit = i;
	}
	sort(line, line+n);
	for(int i = 0; i < n; i++) 
		cout << line[i].str << '\n';
	return 0;
}

方法二:使用排序+char数组

#include<cstdio>
 
int n;
char name[110][30];
int y[110], m[110], d[110];
int line[110];
 
int main()
{
	scanf("%d", &n);
	for(int i=1; i<=n; ++i)
		scanf("%s %d %d %d", name[i], &y[i], &m[i], &d[i]);
 
	for(int i=1; i<=n; ++i)
		line[i] = i;
 
	for(int i=1; i<=n; ++i)
	{
		int mx = i;
		for(int j=i+1; j<=n; ++j)
		{
			if(y[line[j]] < y[line[mx]]||
					(y[line[j]] == y[line[mx]] && m[line[j]] < m[line[mx]])||
					(y[line[j]] == y[line[mx]] && m[line[j]] == m[line[mx]] && d[line[j]] < d[line[mx]]) ||
					(y[line[j]] == y[line[mx]] && m[line[j]] == m[line[mx]] && d[line[j]] == d[line[mx]] && line[j] > line[mx])
			  )
				mx = j;
		}
		int t = line[i]; line[i] = line[mx]; line[mx] = t;
	}
 
	for(int i=1; i<=n; ++i)
		printf("%s\n", name[line[i]]);
 
	return 0;
}
/app/www/public/data/pages/icpc/problems/luogup1104.txt · 最后更改: 2024/03/14 14:02 由 温婕莺