【1025】PAT Ranking (25 分)

举报
野猪佩奇996 发表于 2022/01/22 23:57:26 2022/01/22
863 0 0
【摘要】 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<algorithm> #include<map>#inclu...

      #include<iostream>
      #include<stdio.h>
      #include<stdlib.h>
      #include<math.h>
      #include<string.h>
      #include<algorithm> 
      #include<map>
      #include<vector>
      #include<queue> 
      using namespace std;
      注意该考场数组区间为[num-k,num)和其他边界
      同分则后面的排名要隔后,局部和全局处理不同,后者按顺序边计算总排名,边输出所有考生的信息
      struct Student{
     	char id[15];  //准考证号
     	int score;  //分数
     	int location_number;  //考场号
     	int local_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;  //num为总考生数!!!!
     	scanf("%d",&n);  //n为考场数
     	for(int i=1;i<=n;i++) {
     		scanf("%d",&k);  //该考场内的人数
     		for(int j=0;j<k;j++){
     			scanf("%s %d",stu[num].id, &stu[num].score);
      			stu[num].location_number=i;  //该考生的考场号为i
      			num++;
       		}
     		sort(stu+num-k,stu+num,cmp);  //将该考场的考生排序
      		stu[num-k].local_rank=1;  //该考场第1名的local_rank记为1
     		for(int j=num-k+1;j<num;j++){  //对该考场剩余的考生
     			if(stu[j].score == stu[j-1].score) { //如果与前一位考生同分
      				stu[j].local_rank=stu[j-1].local_rank;  //loca_rank也相同
      			}else{ //如果与前一位考生不同,local_rank为该考生前的人数
      				stu[j].local_rank=j+1-(num-k) ;
      			}
      		}
      	}
     	printf("%d\n",num) ; //输出总考生数
     	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; //当前考生与上一个考生分数不同时,让r更新为人数+1
      		}
     		printf("%s ",stu[i].id);
     		printf("%d %d %d\n",r,stu[i].location_number,stu[i].local_rank);
      	}
     	system("pause");
         return 0;
      }
  
 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/99323772

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。