码迷,mamicode.com
首页 > 其他好文 > 详细

PAT A1025 pat ranking

时间:2019-09-25 00:15:42      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:main   highlight   ios   排名   csharp   student   i+1   输入   rcm   

有n个考场,每个考场都有若干数量个考生,现给出各个考场中考生的准考证号和分数,要求将所有考生的分数从高到低排序,并输出

#include<iostream>
#include<string.h>
#include<algorithm>
//#include<map>

using namespace std;
struct Student
{
	char id[15];           //准考证号 
	int score;            //分数 
	int location_number;  //考场号 
	int location_rank;  //考场内排名	
} stu[30010];

bool cmp(Student a,Student b)
{
	if(a.score != b.score) return a.score> b.score; //按分数从高到底排序
	else return strcmp(a.id,b.id)<0; //分数按照准考证号从小到大排序	
} 

int main()
{
	int n,k,num=0;
	cin>>n;//n为考场数
	for(int i=0;i<n;i++)
	{
		cin>>k;
		for(int j=0;j<k;j++)
		{
		cin>>stu[num].id>>stu[num].score;
		stu[num].location_number=i;
		num++;	
	    } 
	sort(stu + num-k,stu+num,cmp);
	stu[num-k].location_rank=1;    //对于考场的第一名rank记为1
	for(int j = num-k+1;j<num;j++)
	{
		if(stu[j].score==stu[j-1].score)
		{
			stu[j].location_rank=stu[j-1].location_rank;
		}
		else
		{
			stu[j].location_rank=j+1-(num-k);
		}
	 } 
	}
	cout<<num<<endl;
	sort(stu,stu+num,cmp);
	int r=1;
	for (int i=0;i<num;i++)
	{
		if(i>0&&stu[i].score != stu[i-1].score)
		{
			r=i+1; 
		}
		cout<<stu[i].id;
		cout<<r<<stu[i].location_number<<stu[i].location_rank<<endl;
	}
	return 0;
}
/*
输入样例: 
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
*/
 

  

PAT A1025 pat ranking

标签:main   highlight   ios   排名   csharp   student   i+1   输入   rcm   

原文地址:https://www.cnblogs.com/chuxinbubian/p/11581804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!