1141 PAT Ranking of Institutions

题目

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大章鱼(张文哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值