題目描述
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
思路:
因爲 sort 排序不穩定,不能保證數據相同的情況下變量的先後順序,所以在學生類中再聲明一個 num 變量記錄輸入的順序,來避開 sort 的坑完成題目要求
AC代碼:
#include <bits/stdc++.h>
using namespace std;
struct student{
string name;
int year,month,day,num;
};
bool cmp(student a,student b)
{
if(a.year==b.year)
{
if(a.month==b.month)
{
if(a.day==b.day)
return a.num>b.num;
return a.day<b.day;
}
return a.month<b.month;
}
return a.year<b.year;
}
int main() {
int n;
cin>>n;
vector<student>a;
for (int i = 0; i < n; ++i) {
student temp;
cin>>temp.name>>temp.year>>temp.month>>temp.day;
temp.num=i;
a.push_back(temp);
}
sort(a.begin(),a.end(),cmp);
for (int j = 0; j < n; ++j) {
cout<<a[j].name<<endl;
}
return 0;
}