XidianOJ 1017 Codeforce上的rating

题目描述

题目描述: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
",User[i].ID,User[i].Rate);
        }
    }
}
原文地址:https://www.cnblogs.com/ToTOrz/p/6084373.html