思路:
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;
}