题意
要过关要求在线编程的分数>200,而且最后分数要≥60才算过关,最后要按照要求的顺序输出
思路
- 可以用一个结构体
struct
来表示学生的成绩,按照题目的要求读入不同的成绩,按照给定的公式计算总分即可。
代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <cmath>
using namespace std;
struct stu {
string id;
int gp, gmid, gfn, g;
// 默认没有成绩就是-1分
stu(): gp(-1), gmid(-1), gfn(-1), g(-1){}
};
unordered_map<string, stu> mp;
int main() {
int P, M, N;
scanf("%d %d %d", &P, &M, &N);
string s;
for(int i = 0; i < P; i++) {
cin >> s;
scanf("%d", &mp[s].gp);
}
for(int i = 0; i < M; i++) {
cin >> s;
scanf("%d", &mp[s].gmid);
}
for(int i = 0; i < N; i++) {
cin >> s;
scanf("%d", &mp[s].gfn);
}
//将统计好的信息放入vector里面进行排序
vector<stu> v;
for(auto it: mp) {
if(it.second.gmid > it.second.gfn) {
it.second.g = round(0.4 * it.second.gmid + 0.6 * it.second.gfn);
}else {
it.second.g = it.second.gfn;
}
it.second.id = it.first;
v.emplace_back(it.second);
}
sort(v.begin(), v.end(), [&](stu x, stu y) {
if(x.g == y. g)
return x.id < y.id;
else
return x.g > y.g;
});
for(auto it: v) {
if(it.g < 60 || it.gp < 200) continue;
printf("%s %d %d %d %d
", it.id.c_str(), it.gp, it.gmid, it.gfn, it.g);
}
return 0;
}