题目


解法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;
}