排名
7-12 排排排名 (25 分)
众所周知,Keven所在的集训队经常举办比赛,然而每次比赛的排名统计是一个大麻烦,于是Keven找到了你并给了你这次比赛的分数,希望你能帮他统计一下这次比赛前K名队员的排名。
输入格式:
输入在第一行给出 2 个整数,分别是 N(不超过 10 000 的正整数,为学生总数)、K(不超过 100 且不超过 N 的正整数)。接下来 N 行,每行给出一位学生的账号(长度不超过15位、不带空格的字符串)和比赛成绩(区间 [0, 100] 内的整数),其间以空格分隔。题目保证没有重复的账号。
输出格式:
然后按总评成绩非升序输出前K名学生的名次、账号和成绩,其间以 1 个空格分隔。需要注意的是:成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。
需要注意的是:
成绩相同的学生享有并列的排名,排名并列时,按账号的字母序升序输出。详见第二个样例。
假设现在有三位同学,他们的成绩分别是100、100、80,那么此时两位100分的同学的排名应该都是 1 ,并且80分的同学的排名是 3 。
输入样例1:
/*排名*/
#include
#include
#include
#include
using namespace std;
struct node{int number;string name;int score;
}stu[10001];
bool compare(struct node a ,struct node b)
{if(a.score==b.score)return a.name.compare(b.name)<0;//比较两个字符串的大小,如果a.name>b.name > 0这里要求升序排列 elsereturn a.score>b.score;
}
int main()
{int i,n,m,temp = 1;cin>>n>>m;for(int i = 0;i < n;i++){cin>>stu[i].name>>stu[i].score;}sort(stu,stu+n,compare);stu[0].number = 1;for(i = 1;i < n;i++){if(stu[i].score==stu[i-1].score){stu[i].number = stu[i-1].number;temp++;}else{stu[i].number = stu[i-1].number+temp;temp = 1;}}for(i = 0;i < n;i++){if(stu[i].number<=m){cout<
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
