题意:PAT成绩分类计算,结果为学校总分以及考试人数排名
#include<iostream>
#include<cctype>
#include<unordered_map>
#include<vector>
#include<algorithm>
using namespace std;
struct ss {
double score=0;
int num=0;
};
bool cmp(pair<string ,struct ss> a,pair<string,struct ss> b) {
if((int)a.second.score==(int)b.second.score) {
if(a.second.num==b.second.num)
return a.first<b.first;
else return a.second.num<b.second.num;
} else return a.second.score>b.second.score;
}
int main() {
int n;
cin>>n;
unordered_map<string ,struct ss> ans;//坑:用unordered节约运行时间
for(int i=0; i<n; ++i) {
string num,scn;
double score;//坑:必须求完和才能进行最后结果的取整
cin>>num>>score>>scn;
for(int i=0; i<scn.size(); ++i)
scn[i]=tolower(scn[i]);//坑:不是所有的学校都小写
if(num[0]=='B')
score=score/1.5;
else if(num[0]=='T')
score*=1.5;
ans[scn].score+=score;
ans[scn].num++;
}
vector<pair<string ,struct ss>> ans1(ans.begin(),ans.end());
sort(ans1.begin(),ans1.end(),cmp);
cout<<ans1.size()<<endl;
int t=1,c=2;//排名变化记录
auto it =ans1.begin();
cout<<t<<" "<<(*it).first<<" "<<(int)(*it).second.score<<" "<<(*it).second.num<<endl;
int temp=(int)(*it).second.score;
++it;
for(; it!=ans1.end(); ++it) {
if((int)(*it).second.score==temp) {
cout<<t<<" "<<(*it).first<<" "<<(int)(*it).second.score<<" "<<(*it).second.num<<endl;
} else {
t=c;
temp=(*it).second.score;
cout<<t<<" "<<(*it).first<<" "<<(int)(*it).second.score<<" "<<(*it).second.num<<endl;
}
c++;
}
return 0;
}