0
点赞
收藏
分享

微信扫一扫

1085 PAT单位排行 (25 分)

天使魔鬼 2022-02-11 阅读 32
c++

 思路:大体思路是对数据合并、排序、输出。原本我是用纯结构体数组的,但在查找同一学校时会超时,所以改为用map来计数。在合并的时候还要注意加权总分是求和之后再取整。

#include<iostream>
#include<cctype>
#include<algorithm>
#include<map>
using namespace std;
struct stu{
	string name;
	int sum,num;
}s[100000];
bool cmp(stu a,stu b){
	return a.sum!=b.sum?a.sum>b.sum:(a.num!=b.num?a.num<b.num:a.name<b.name);
}
int main(){
	int n,m,p=0;
	map<string,double> psum;
	map<string,int> pnum;
	string x,t;
	cin>>n;
	for(int i=0;i<n;i++){
		getchar();
		cin>>t>>m>>x;
		for(int j=0;j<x.length();j++)x[j]=tolower(x[j]);
		if(pnum[x]==0){
			s[p].name=x;
			p++;
		}
		pnum[x]++;
		psum[x]+=m*(t[0]=='B'?1/1.5:(t[0]=='T'?1.5:1));
	}
	for(int i=0;i<p;i++){
		s[i].num=pnum[s[i].name];
		s[i].sum=psum[s[i].name];
	}
	sort(s,s+p,cmp);
	cout<<p<<endl;
	for(int i=0,k=1;i<p;i++){
		if(i==0||s[i].sum==s[i-1].sum)
			cout<<k<<' '<<s[i].name<<' '<<s[i].sum<<' '<<s[i].num<<endl;
		else{
			cout<<i+1<<' '<<s[i].name<<' '<<s[i].sum<<' '<<s[i].num<<endl;
			k=i+1;
		}
	}
    return 0;
}

 

举报

相关推荐

0 条评论