1 条题解
-
0
自动搬运
来自洛谷,原作者为

Yxa_Sheep
打表过样例,暴力出奇迹,搜索真牛逼,骗分进省一||深搜 MLE,广搜 TLE,打表 RE,退火又 CE||删掉 display 看主页||被封取关(解封后私信)||六年级蒟蒻 ,代词请用“他”||当前状态:<离线>搬运于
2025-08-24 21:20:59,当前版本为作者最后更新于2025-08-10 22:50:05,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题意
给定 个人的姓名与出生日期,按年龄从大到小排序后输出。如果有两个同学生日相同,输入靠后的同学先输出。
思路
我们用结构体储存每个同学的信息时还可以用 记下他是第几个输入的,这样在生日相同时可以比较谁的 大。
接下来就是正常比较年龄了,我们都知道谁的出生年 小谁就年龄大。如果 相同就比较谁的 小,如果 相同就比较谁的 小,如果 也相同就比较谁的 大。于是得到了以下比较函数:bool cmp(node a, node b) { if (a.y == b.y) { if (a.m == b.m) { if (a.d == b.d) return a.id > b.id; return a.d < b.d; } return a.m < b.m; } return a.y < b.y; }其他细节见代码。
代码
#include <bits/stdc++.h> using namespace std; int n; struct node { string s; int id, y, m, d; } a[110]; bool cmp(node a, node b) { if (a.y == b.y) { if (a.m == b.m) { if (a.d == b.d) return a.id > b.id; return a.d < b.d; } return a.m < b.m; } return a.y < b.y; } int main() { ios::sync_with_stdio(0), cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].s >> a[i].y >> a[i].m >> a[i].d; a[i].id = i; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) cout << a[i].s << "\n"; return 0; }题解来之不易,且看且珍惜。给个赞再走吧。
- 1
信息
- ID
- 106
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者