AcWing 1502. PAT 排名
原题链接
中等
作者:
COZY_9
,
2024-03-14 19:24:57
,
所有人可见
,
阅读 14
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct rank{
string x_h;
int f_s;
int d_q;
}R;
vector<R> x_x;
void add(int i){
R temp;
temp.d_q=i;
cin>>temp.x_h>>temp.f_s;
x_x.push_back(temp);
}
bool cmp(R a,R b){
if(a.f_s==b.f_s) return a.x_h<b.x_h;
return a.f_s>b.f_s;
}
int main(){
int n;
cin>>n;
int r_s=0;
for(int i=1;i<n+1;i++){
int k;
cin>>k;
r_s+=k;
while(k--){
add(i);
}
}
sort(x_x.begin(),x_x.end(),cmp);
cout<<r_s<<endl;
int z_m=0;
int z_t=-1;
int z_j=1;
int d_m[n];
int d_t[n];
int d_j[n];
for(int i=1;i<n+1;i++){
d_m[i]=0;
d_t[i]=-1;
d_j[i]=1;
}
for(int i=0;i<x_x.size();i++){
cout<<x_x[i].x_h<<' ';
//总排名
if(z_t!=x_x[i].f_s){
z_m+=z_j;
z_j=1;
}
else z_j++;
z_t=x_x[i].f_s;
cout<<z_m<<' '<<x_x[i].d_q<<' ';
//地区排名
if(d_t[x_x[i].d_q]!=x_x[i].f_s){
d_m[x_x[i].d_q]+=d_j[x_x[i].d_q];
d_j[x_x[i].d_q]=1;
}
else d_j[x_x[i].d_q]++;
d_t[x_x[i].d_q]=x_x[i].f_s;
cout<<d_m[x_x[i].d_q]<<endl;
}
return 0;
}