小猴编程周赛C++ | 2022年秋第9周T2成绩排名(二)

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
小猴举办了一场编程比赛——"小猴杯”,有 n n n名选手参加了比赛,赛后小猴邀请你对所有选手的比赛成绩进行分析,具体来说,你需要按照要求将比赛成绩从高到低的顺序或者从低到高的顺序进行排序。
对于成绩相同的选手,无论以那种顺序排序,都要按照原始成绩排列中靠前的选手排列在前的规则处理。例如,原始成绩排列中的两名选手的信息: p i p i pipi pipi 300 300 300 x i a o m e i xiaomei xiaomei 300 300 300排序之前 p i p i pipi pipi排在 x i a o m e i xiaomei xiaomei前面, 经过排序之后 p i p i pipi pipi还是排在 x i a o m e i xiaomei xiaomei前面。
【输入】
第一行,包含两个正整数 n n n,表示参选手人数;
第二行,包含一个整数 0 0 0 1 1 1,表示排序规则, 0 0 0表示从高到底, 1 1 1表示从低到高;
接下来 n n n行, 每行包含一个字符串 n a m e name name和一个整数 s c o r e score score, 分别表示一名选手的姓名和比赛成绩, 保证姓名互不相同。
【输出】
n n n行,第 i i i行表示经过排序之后第 i i i名选手的姓名和比赛成绩。
【输入样例】

4
0
pipi 70
tx 96
Tom 70
xiaomei 67

【输出样例】

tx 96
pipi 70
Tom 70
xiaomei 67

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
struct play {
    string name;
    int score, id;
}a[200010];
bool cmp1(play a, play b)
{
    if (a.score!=b.score) {
        return a.score<b.score;
    }
    return a.id < b.id;
}
bool cmp2(play a, play b)
{
    if (a.score!=b.score) {
        return a.score>b.score;
    }
    return a.id < b.id;
}
int main()
{
    int n, x;
    cin >> n >> x;
    for (int i=1; i<=n; i++) {  // 输入n名选手的信息
        cin >> a[i].name >> a[i].score;  // 姓名和成绩
        a[i].id = i;  // 原始顺序就是i
    }
    if (x==1) {  // 输入1就是从小到大排序
        sort(a+1, a+n+1, cmp1);
    } else {  // 否则就是从大到小排序
        sort(a+1, a+n+1, cmp2);
    }
    for (int i=1; i<=n; i++) {  // 输出排序后的姓名和成绩
        cout << a[i].name << " "  << a[i].score << endl;
    }
    return 0;
}

【运行结果】

4
0
pipi 70
tx 96
Tom 70
xiaomei 67
tx 96
pipi 70
Tom 70
xiaomei 67
  • 51
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值