题目链接:https://www.patest.cn/contests/pat-a-practise/1025
结构体排序
#include<bits/stdc++.h>
const int maxn =10100;
using namespace std;
int n,k;
struct Node{
string s;
int fin_rak;
int loc_num;
int loc_rak;
int score;
};
Node P[300100];
int tot=0,t;
int cmp(const Node &a, const Node &b){
if(a.score!=b.score)return a.score>b.score;
else return a.s<b.s;
}
int main(){
scanf("%d",&n);
t=0;
int i=0;
int temp,rak;
while(n--){
scanf("%d",&k);
tot+=k;
t++;
for(int j=i;j<i+k;j++){
cin>>P[j].s;
scanf("%d",&P[j].score);
P[j].loc_num=t;
}
sort(P+i,P+i+k,cmp);
temp=P[i].score; rak=1;
P[i].loc_rak=1;
for(int j=i;j<i+k;j++){
if(P[j].score<temp){
temp=P[j].score; rak=j+1-i;
P[j].loc_rak=rak;
}
else P[j].loc_rak=rak;
}
i+=k;
}
sort(P,P+tot,cmp);
temp=P[0].score,rak=1;
P[0].fin_rak=1;
for(int i=1;i<tot;i++){
if(P[i].score<temp){
temp=P[i].score;rak=i+1;
P[i].fin_rak=rak;
}
else P[i].fin_rak=rak;
}
printf("%d\n",tot);
for(int i=0;i<tot;i++){
cout<<P[i].s;
printf(" %d %d %d\n",P[i].fin_rak,P[i].loc_num,P[i].loc_rak);
}
}