#include <iostream>
#include <vector>
# include <algorithm>
using namespace std;
struct student{
string rid;
int score;
int location_number;
int location_rank;
int all_rank;
}stu[100010];
bool cmp(int a,int b){
if(stu[a].score==stu[b].score){
return stu[a].rid<stu[b].rid;
}
return stu[a].score>stu[b].score;
}
int main() {
int N;
//全局vector记录所有
vector<int> all;
cin>>N;
int id =0;
for(int i = 1;i<=N;i++){
int number;
//局部vector记录当前考场
vector<int> temp;
cin>>number;
for(int j = 0;j<number;j++){
cin>>stu[id].rid>>stu[id].score;
stu[id].location_number=i;
all.push_back(id);
temp.push_back(id);
id++;
}
sort(temp.begin(),temp.end(),cmp);
stu[temp[0]].location_rank =1;
for(int i =0;i<temp.size();i++){
if(i>0&&stu[temp[i]].score==stu[temp[i-1]].score){
stu[temp[i]].location_rank=stu[temp[i-1]].location_rank;
}else{
stu[temp[i]].location_rank = i+1;
};
}
}
sort(all.begin(),all.end(),cmp);
//总排名
stu[all[0]].all_rank=1;
for(int i =0;i<all.size();i++){
if(i>0&&stu[all[i]].score==stu[all[i-1]].score){
stu[all[i]].all_rank=stu[all[i-1]].all_rank;
} else{
stu[all[i]].all_rank = i+1;
}
}
cout<<id<<endl;
for(int i =0;i<all.size();i++){
cout<<stu[all[i]].rid<<" "<<stu[all[i]].all_rank<<" "<<stu[all[i]].location_number<<" "<<stu[all[i]].location_rank<<endl;
}
return 0;
}
江大学PAT甲级A1025(C++)题解
最新推荐文章于 2022-09-27 22:04:13 发布