洛谷 P1104 生日

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

【输入格式】
有2行,
第1行为OI组总人数n;
第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。

【输出格式】
有n行,
即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

【输入输出样例】
输入

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

输出

Luowen
Yangchu
Qiujingya

【说明/提示】

数据规模

1<n<100
length(s)<20

【代码实现】

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct oi
 4 {
 5     string s;
 6     int y,m,d,id;
 7 }a[1001];
 8 bool cmp(oi a,oi b)
 9 {
10     if(a.y!=b.y)
11     {
12         return a.y<b.y;
13     }
14     else 
15     {
16         if(a.m!=b.m)
17         {
18             return a.m<b.m;
19         }
20         else
21         {
22             if(a.d!=b.d)
23             {
24                 return a.d<b.d;
25             }
26             else{
27                 return a.id>b.id;//两人生日相同,返回id靠后的
28             }
29         }
30             
31     }
32 }
33 
34 int main()
35 {
36     int n;
37     scanf("%d",&n);
38     for(int i=1;i<=n;i++)
39     {
40         cin>>a[i].s>>a[i].y>>a[i].m>>a[i].d;
41         a[i].id=i;
42     }
43     sort(a+1,a+1+n,cmp);
44     for(int i=1;i<=n;i++)
45     {
46         cout<<a[i].s<<endl;
47     }
48     return 0;
49  } 
原文地址:https://www.cnblogs.com/TheZealous/p/14391690.html