没什么技巧,就是注意一下怎么把每个班的结构体放入总的vector以及 cmp的压缩技巧
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int num,num1;
struct student{
string sno;
int score,local,l_rank,r;
};
bool cmp1(student x,student y){
return x.score==y.score?x.sno<y.sno:x.score>y.score;
}
int main(){
scanf("%d",&num);
vector<student> tol;
for(int i=1;i<=num;i++){
cin>>num1;
vector<student> s(num1);
for(int j=0;j<num1;j++){
cin>>s[j].sno>>s[j].score;
s[j].local=i;
}
sort(s.begin(),s.end(),cmp1);
int sck=1;
for(int k=0;k<s.size();k++){
(k-1>=0&&s[k].score==s[k-1].score)?s[k].l_rank=s[k-1].l_rank:s[k].l_rank=sck;
sck++;
tol.push_back(s[k]);
}
}
sort(tol.begin(),tol.end(),cmp1);
sck=0;
for(int i=0;i<tol.size();i++){
(i-1>=0&&tol[i].score==tol[i-1].score)?tol[i].r=tol[i-1].r:tol[i].r=sck;
sck++;
}
cout<<tol.size()<<endl;
for(int i=0;i<tol.size();i++){
cout<<tol[i].sno<<" "<<tol[i].r<<" "<<tol[i].local<<" "<<tol[i].l_rank<<endl;
}
return 0;
}