PAT A1025【PAT Ranking】

在这里插入图片描述

我的解法:

#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
 
struct student{
    char id[14];
    int scoreRange;
    int testRoomId;
    int testRoomRange;
    float score;
};
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 roomNum;
    int totalNum=0;
    cin>>roomNum;
    student stu[30001];
    for(int i=0;i<roomNum;i++){
        int stuNum;
        cin>>stuNum;
        for(int j=0;j<stuNum;j++){
            cin>>stu[totalNum].id>>stu[totalNum].score;
            stu[totalNum].testRoomId=i+1;
            totalNum+=1;
        }
        sort(stu+totalNum-stuNum,stu+totalNum,cmp);
         
        for(int j=0;j<stuNum;j++){ //这里需要注意!考场内排名
            if(j>0&&stu[totalNum-stuNum+j].score==stu[totalNum-stuNum+j-1].score){
                stu[totalNum-stuNum+j].testRoomRange=stu[totalNum-stuNum+j-1].testRoomRange;
            }else{
                stu[totalNum-stuNum+j].testRoomRange=j+1;
            }
             
        }
         
    }
     
    cout<<totalNum<<endl;
    sort(stu,stu+totalNum,cmp);
    for(int i=0;i<totalNum;i++){
       if(i>0&&stu[i].score==stu[i-1].score){
          stu[i].scoreRange=stu[i-1].scoreRange;
       }else{
           stu[i].scoreRange=i+1;
       }
        cout<<stu[i].id<<" "<<stu[i].scoreRange<<" "<<stu[i].testRoomId<<" "<<stu[i].testRoomRange<<endl;
         
    }
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值