随笔 - 150  文章 - 0 评论 - 3 阅读 - 34768
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

题目描述

题目描述:codeforces上每个注册的人都有一个rating,详见http://codeforces.com/ratings,
比如WJMZBMR的rating为2841。给你N个人的ID和rating,现在需要你把他们按rating从大到小进行排序,rating相同ID字典序较小的靠前。(比如 tourist的字典序就小于WJMZBMR)
PS:可以把字典序的大小当成两个字符串比较的结果。

 

输入

输入数据有多组,每组数据第一行是整数N (N <= 10000),表示需要排序的人数, 
然后N行,每一行一个ID(字符串),一个整数rating。(ID长度不超过20, 每个人的ID都不同)。
如果N=0, 则表示输入结束,该组数据不做任何处理。不超过10组数据, 最后一组数据后面是N=0.

 

输出

对于每组输出数据, 输出n行, 每一行分别是ID 和rating。 中间用一个空格隔开。

--正文
使用C++自带的sort可以省不少事,只需要写好Compare函数即可
复制代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;

struct UserNode {
    char ID[20];
    int Rate;
};

bool cmp(struct UserNode a,struct UserNode b){
    if (a.Rate > b.Rate) return true;
    if (a.Rate < b.Rate) return false;
    else {
        return (strcmp(b.ID,a.ID) > 0); 
    }
}


struct UserNode User[10001]; 
int n;
int main(){
    while (scanf("%d",&n) != EOF){
        if (n == 0) break;
        int i,j;
        for (i=0;i<n;i++){
            scanf("%s %d",User[i].ID,&User[i].Rate);
        }
        sort(User,User+n,cmp);
        for (i=0;i<n;i++){
            printf("%s %d\n",User[i].ID,User[i].Rate);
        }
    }
}
复制代码

 

posted on   Crutain  阅读(594)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
阅读排行:
· 历时 8 年,我冲上开源榜前 8 了!
· 物流快递公司核心技术能力-海量大数据处理技术
· 四大AI编程工具组合测评
· 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案
· 如何在 Github 上获得 1000 star?
点击右上角即可分享
微信分享提示