题目要求

给定学生的成绩单,成绩单中包含每个学生的姓名和分数,请按照要求将成绩单按成绩从高到低或从低到高的顺序进行重新排列。

对于成绩相同的学生,无论以哪种顺序排列,都要按照原始成绩单中靠前的学生排列在前的规则处理。

输入格式

  • 第一行包含整数 N,表示学生个数。
  • 第二行包含一个整数 0 或 1,表示排序规则,0 表示从高到低,1 表示从低到高。
  • 接下来 N 行,每行描述一个学生的信息,包含一个长度不超过 10 的小写字母构成的字符串表示姓名以及一个范围在 0∼100 的整数表示分数。

输出格式

输出重新排序后的成绩单。

每行输出一个学生的姓名和成绩,用单个空格隔开。

数据范围

  • 1≤N≤1000

示例输入1:

4
0
jack 70
peter 96
Tom 70
smith 67

示例输出1:

peter 96
jack 70
Tom 70
smith 67

示例输入2:

4
1
jack 70
peter 96
Tom 70
smith 67

示例输出2:

smith 67
jack 70
Tom 70
peter 96

题目分析

虽然只是简单的排序,但是题目隐含了小细节 对于成绩相同的学生,无论以哪种顺序排列,都要按照原始成绩单中靠前的学生排列在前的规则处理 这表示我们的排序需要是 稳定的排序

代码实现

#include <iostream>
#include <algorithm>
#include <vector>
#define x first
#define y second
using namespace std;
using PSI = pair <string,int>;

bool fl;
int n;
vector <PSI> arr;
int main () {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> fl;
    while(n--) {
        string s;
        int sc;
        cin >> s >> sc;
        arr.push_back({s,sc});  
    }
    stable_sort(arr.begin(),arr.end(),[] (const PSI& a, const PSI& b) {
        return fl ? a.y < b.y : a.y > b.y;
    });
    for (auto& t : arr) cout << t.x << ' ' << t.y << '\n';
    return 0;
}

题目要求

给定学生的成绩单,成绩单中包含每个学生的学号和分数,请将成绩单按成绩从低到高的顺序重新排序。

如果学生的成绩相同,则按照学号从小到大的顺序进行排序。

输入格式

  • 第一行包含整数 N,表示学生数量。
  • 接下来 N 行,每行包含两个整数 p 和 q,表示一个学生的学号和成绩。学生的学号各不相同。

输出格式

输出重新排序后的成绩单。

每行输出一个学生的学号和成绩,用单个空格隔开。

数据范围

  • 1 ≤ N ≤ 100
  • 1 ≤ p ≤ 100
  • 0 ≤ q ≤ 100

示例输入:

3
1 90
2 87
3 92

示例输出:

2 87
1 90
3 92

题目分析

这道题和上一道类似,不过,这次需要使用不稳定的排序。

代码实现

#include <iostream>
#include <algorithm>
#include <vector>
#define x first
#define y second
using namespace std;
using PII = pair <int,int>;

int n;
vector <PII> arr;
int main () {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    while(n--) {
        int s, sc;
        cin >> s >> sc;
        arr.push_back({s,sc});  
    }
    sort(arr.begin(),arr.end(),[](const PII& a, const PII& b) {
        if (a.y == b.y) return a.x < b.x;
        return a.y < b.y;
    });
    for (auto& t : arr) cout << t.x << ' ' << t.y << '\n';
    return 0;
}
分类: Sort

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

友情链接:Ctips' blog, Colza’s blog

站点状态:Status