AcWing 3376. 成绩排序2

25

双关键词排序

题目

给定学生的成绩单,成绩单中包含每个学生的学号和分数,请将成绩单按成绩从低到高的顺序重新排序。
如果学生的成绩相同,则按照学号从小到大的顺序进行排序。

输入格式
第一行包含整数 NN,表示学生数量。
接下来 NN 行,每行包含两个整数 ppqq,表示一个学生的学号和成绩。
学生的学号各不相同。

输出格式
输出重新排序后的成绩单。
每行输出一个学生的学号和成绩,用单个空格隔开。

数据范围
1N1001≤N≤100,
1p1001≤p≤100,
0q1000≤q≤100

输入样例:

3
1 90
2 87
3 92

输出样例:

2 87
1 90
3 92

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;

int n;
struct Person
{
    int id;
    int score;
    bool operator< (const Person& t) const
    {
        if (score != t.score) return score < t.score;
        return id < t.id;
    }
}q[N];

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> q[i].id >> q[i].score;
    sort(q, q + n);

    for (int i = 0; i < n; i ++ ) cout << q[i].id << ' ' << q[i].score << endl;
    return 0;
}