【问题描述】
Coldforces是一个算法竞赛在线评测网站,并且会不定期地举办在线的算法竞赛。Coldforce上优秀的题目质量吸引了来自全球各地的顶尖算法竞赛选手来参加比赛。为了能够更好地激励大家参加比赛,Coldforces推出了一个rating系统------给每名注册的选手记一个分数,也就是rating。rating会在每场Coldforces比赛后根据参加选手的表现以及比赛前的rating进行相应更新。
zyb作为Coldforces的管理员之一,他的任务是给Coldforces网站增设一个rating排行榜。他现在知道了注册网站的所有选手的账号id(用一个长度不超过15的字符串表示,字符串中仅由a−za−z的小写字母,A−ZA−Z的大写字母,0−90−9的数字和下划线__组成),以及该id所对应的rating,他现在希望将所有选手按照rating从高到低排序。你能帮帮他吗?
【输入格式】
第一行读入一个正整数nn,表示Coldforces网站中注册的选手数目。 接下来nn行,每行包含长度不超过1515的字符串ss表示id和一个数字rr表示rating,字符串与数字之间用一个字符分隔。输入保证字符串中仅由a−za−z的小写字母,A−ZA−Z的大写字母,0−90−9的数字和下划线__组成,且所有选手的id和rating均互不相同。
【输出格式】
要求输出nn行,每行包含一名选手的id和rating,输出顺序按照所有选手的rating从高到低排序
【样例1】
input
5
ksun48 3582
maroonrk 3533
tourist 3757
jiangly 3590
Um_nik 3539
output
tourist 3757
jiangly 3590
ksun48 3582
Um_nik 3539
maroonrk 3533
【样例2】
input
6
triple__a 2624
triple__b 2312
triple__c 2390
triple__d 1921
triple__e 2112
triple__f 2407
output
triple__a 2624
triple__f 2407
triple__c 2390
triple__b 2312
triple__e 2112
triple__d 1921
【数据范围】
对于20%的数据,1≤n≤201≤n≤20.
对于100%的数据,1≤n≤1000,0≤r≤40001≤n≤1000,0≤r≤4000.
这道题是一道很简单的结构题目,首先创建一个结构,结构里面的元素有两个,一个是name,名称,另外一个就是分数rating,原来STL库的sort排序原本是不支持结构排序的,但是我们只需要写一个结构排序引用函数,就可以使用sort了。
经过排序之后,for循环输出即可,看一下数据范围,O(n^2)没有超时。
排名:
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
struct Coldforces{
string name;
int rating;
}c[N];
typedef struct Coldforces Cold;
int cmp(Cold a,Cold b){
return a.rating>b.rating;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>c[i].name>>c[i].rating;
sort(c,c+n,cmp);
for(int i=0;i<n;i++)
cout<<c[i].name<<" "<<c[i].rating<<endl;
return 0;
}
这是普及组模拟的第一题,所以很简单,等会儿我将会讲解第二题。