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 由 温婕莺