过了五个,精度问题
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef struct rank{
string x_x;
double z_f;
int r_s;
}R;
vector<R> res;
int find(string x_x){
for(int i=0;i<res.size();i++){
if(res[i].x_x==x_x) return i;
}
return -1;
}
bool cmp(R a,R b){
if(int(a.z_f)==int(b.z_f)){
if(a.r_s==b.r_s){
for(int i=0;i<a.x_x.length()&&i<b.x_x.length();i++){
if(a.x_x[i]!=b.x_x[i]) return a.x_x[i]<b.x_x[i];
}
return a.x_x.length()<b.x_x.length();
}
return a.r_s<b.r_s;
}
return int(a.z_f)>int(b.z_f);
}
int main(){
int n;
cin>>n;
while(n--){
string k_h;
double f_s;
string x_x;
cin>>k_h>>f_s>>x_x;
if(k_h[0]=='B') f_s=f_s/1.5;
if(k_h[0]=='T') f_s=f_s*1.5;
for(int i=0;i<x_x.length();i++){
if(x_x[i]<='Z'){
x_x[i]=x_x[i]+32;
}
}
int i=find(x_x);
if(find(x_x)==-1){
R temp;
temp.x_x=x_x;
temp.z_f=f_s;
temp.r_s=1;
res.push_back(temp);
}
else{
res[i].z_f+=f_s;
res[i].r_s++;
}
}
sort(res.begin(),res.end(),cmp);
int p_m=0;
int p_t=-1;
int p_j=1;
int len=res.size();
cout<<len<<endl;
for(int i=0;i<res.size();i++){
//排名
int f_s=res[i].z_f;
if(f_s!=p_t){
p_m+=p_j;
p_j=1;
}
else{
p_j++;
}
p_t=f_s;
cout<<p_m<<' ';
cout<<res[i].x_x<<' '<<f_s<<' '<<res[i].r_s<<endl;
}
return 0;
}