【题目描述】
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 }