题目

题意: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;
}