sort填坑 洛谷 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

思路:
因爲 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章