本题是参考L_Aster,学到了关于auto,tolower,isupper等用法
#include<bits/stdc++.h>
using namespace std;
struct node{
int rank;
string school;
int score,num;
node(int r,string s,int t,int n):rank(r),school(s),score(t),num(n){}//函数赋值
};
bool cmp(const node &a,const node &b)
{
if(a.score!=b.score) return a.score>b.score;
else if(a.num!=b.num) return a.num<b.num;
else return a.school<b.school;
}
int main()
{
int n;
//freopen("1085.txt","r",stdin);
scanf("%d",&n);
map<string,pair<int,double> > mp;
for(int i=0;i<n;i++)
{
double score;
char school[10],name[10];
scanf("%s %lf %s",name,&score,school);
if(name[0]=='B') score/=1.5;
if(name[0]=='T') score*=1.5;
for(int j=0;j<strlen(school);j++)
{
if(isupper(school[j]))
school[j]=tolower(school[j]);
}
auto &x=mp[school];
x.first++;x.second+=score;
}
vector<node> v;
for(auto &x:mp)
{
string sch=x.first;
int nu=x.second.first;
int sc=x.second.second;
v.push_back(node(0,sch,sc,nu));
}
sort(v.begin(),v.end(),cmp);
printf("%d\n",v.size());
for(int i=0;i<v.size();)
{
int j=i+1;
v[i].rank=j;
while(v[i].score==v[j].score&&j<v.size())
{
v[j].rank=v[i].rank;j++;
}
i=j;
}
for(node &x:v)
{
printf("%d %s %d %d\n",x.rank,x.school.c_str(),x.score,x.num);
}
return 0;
}