PAT 甲级 1137 Final Grading (25 分)

思路:

1.以id为键值存储,然后计算、筛选、排序即可;
2.总分注意要四舍五入,计算时总分加上0.5即可;
3.注意区分没考的和考0分的,分别输出是-1和0;

代码:

#include<iostream>
#include<unordered_map>
#include<algorithm>
#include<vector>
using namespace std;
struct score{ 
	int s[3]={-1,-1,-1};
};
struct stu{
	string id;
	int g;
};
bool cmp(const stu & a,const stu & b){
	return a.g==b.g?a.id<b.id:a.g>b.g;
}
unordered_map<string,score> mp;
int main(){
	int n[3];
	cin>>n[0]>>n[1]>>n[2];
	for(int i=0;i<3;i++)
		for(int j=0;j<n[i];j++){
			string id;
			cin>>id;
			cin>>mp[id].s[i];
		}
	vector<stu> v;
	for(auto i:mp){
		stu s;
		int sco=i.second.s[1]*0.4+i.second.s[2]*0.6+0.5;
		s.g=sco>i.second.s[2]?sco:i.second.s[2];
		if(s.g<60||i.second.s[0]<200) continue;
		s.id=i.first;
		v.push_back(s);
	}
	sort(v.begin(),v.end(),cmp);
	for(auto i:v)
		printf("%s %d %d %d %d
",i.id.c_str(),mp[i.id].s[0],mp[i.id].s[1],mp[i.id].s[2],i.g);
	return 0;
}
原文地址:https://www.cnblogs.com/yuhan-blog/p/12309081.html