题目描述
题目描述: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); } } }