题目
![]()
解法1
点击查看代码
#include<iostream>
#include<unordered_map>
#include<algorithm>
using namespace std;
struct Std{
string id;
int Gp=-1, Gm=-1, Gf=-1, G=-1;
};
bool cmp(const Std& s1, const Std& s2) {
if (s1.G != s2.G) return s1.G > s2.G;
return s1.id < s2.id;
}
int main() {
int p, m, n; scanf("%d %d %d",&p,&m,&n);
unordered_map<string, Std> map;
while (p--) {
string id; int Gp;
cin >> id >> Gp;
map[id].Gp = Gp;
map[id].id = id;
}
while (m--) {
string id; int Gm;
cin >> id >> Gm;
map[id].Gm = Gm;
map[id].id = id;
}
while (n--) {
string id; int Gf;
cin >> id >> Gf;
map[id].Gf = Gf;
map[id].id = id;
}
vector<Std> vs;
for (auto& kv : map) {
auto& s = kv.second;
if (s.Gp < 200) continue; // 不合格
if (s.Gf == -1) continue; // 没有期末成绩,不能计算最终成绩
if (s.Gm > s.Gf && s.Gm != -1) {
s.G = (s.Gm * 0.4 + s.Gf * 0.6)+0.5;
} else {
s.G = s.Gf;
}
if (s.G >= 60) {
vs.push_back(s);
}
}
sort(vs.begin(),vs.end(),cmp);
for (auto it : vs) {
cout << it.id << " " << it.Gp << " " << it.Gm << " " << it.Gf <<" "<< it.G << endl;
}
return 0;
}