这个题目的最后一个point挺有趣的,如果用int进行输出就过不了,但是如果用double也过不了,在排序和排rank的时候必须用int型排序或者是floor函数处理,所以我干脆就新建一个sum变量作为最后的输出了。。。
#include<bits/stdc++.h>
using namespace std;
struct school{
string name;
double tws=0;
int sum;
int ns=0;
int rank;
}temp;
bool cmp(school a,school b){
if(a.sum!=b.sum)return a.tws>b.tws;
else if(a.ns!=b.ns) return a.ns<b.ns;
else return a.name<b.name;
}
int main(){
vector<struct school> scl;
unordered_map<string,int> mp;
int n;
string id,s;
int g;
scanf("%d",&n);
int cnt=0;
for(int i=0;i<n;i++){
cin >> id>>g>>s;
transform(s.begin(), s.end(), s.begin(), ::tolower);
if(mp[s]==NULL){
mp[s]=++cnt;
// printf("%d",cnt);
temp.name=s;
temp.ns=1;
if(id[0]=='A')
temp.tws=g;
else if(id[0]=='B')
temp.tws=g/1.5;
else if(id[0]=='T')
temp.tws=g*1.5;
scl.push_back(temp);
// printf("%d",scl[mp[s]].ns);
}
else{
scl[mp[s]-1].ns++;//printf("%d",scl[mp[s]-1].ns);
if(id[0]=='A')
scl[mp[s]-1].tws+=g;
else if(id[0]=='B')
scl[mp[s]-1].tws+=g/1.5;
else if(id[0]=='T')
scl[mp[s]-1].tws+=g*1.5;
}
}
for(int i=0;i<scl.size();i++){
scl[i].sum=scl[i].tws;
}
sort(scl.begin(),scl.end(),cmp);
if(scl.size())scl[0].rank=1;
if(scl.size()>1)for(int i=1;i<scl.size();i++){
if(scl[i].sum==scl[i-1].sum)scl[i].rank=scl[i-1].rank;
else scl[i].rank=i+1;
}
printf("%d\n",scl.size());
for(int i=0;i<scl.size();i++){
printf("%d %s %d %d\n",scl[i].rank, scl[i].name.c_str(), scl[i].sum, scl[i].ns);
}
return 0;
}