排序题
//
// main.cpp
// PATA1137
//
// Created by Phoenix on 2018/2/26.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 30010;
struct node {
string id;
int program;
int Gm, Gf;
int grade;
int flag;
}stu[maxn];
bool cmp(node a, node b) {
if(a.grade != b.grade) return a.grade > b.grade;
else return a.id < b.id;
}
map<string, int> mp;
int main(int argc, const char * argv[]) {
int p, m, n;
scanf("%d %d %d", &p, &m, &n);
for(int i = 0; i < p + m + n; i++) {
stu[i].program = 0;
stu[i].Gm = stu[i].Gf = -1;
stu[i].grade = 0;
stu[i].flag = 0;
}
int num = 0;
for(int i = 0; i < p; i++) {
string name;
int mark;
cin >> name >> mark;
if(mp.find(name) == mp.end()) {
mp[name] = num;
stu[num++].id = name;
}
stu[mp[name]].program = mark;
}
for(int i = 0; i < m; i++) {
string name;
int mark;
cin >> name >> mark;
if(mp.find(name) == mp.end()) {
mp[name] = num;
stu[num++].id = name;
}
stu[mp[name]].Gm = mark;
}
for(int i = 0; i < n; i++) {
string name;
int mark;
cin >> name >> mark;
if(mp.find(name) == mp.end()) {
mp[name] = num;
stu[num++].id = name;
}
stu[mp[name]].Gf = mark;
}
for(int i = 0; i < num; i++) {
if(stu[i].program < 200) stu[i].flag = 1;
if(stu[i].Gm > stu[i].Gf) {
stu[i].grade = 0.4 * stu[i].Gm + 0.6 * stu[i].Gf + 0.5;
} else {
stu[i].grade = stu[i].Gf;
}
if(stu[i].grade < 60) stu[i].flag = 1;
}
sort(stu, stu + num, cmp);
for(int i = 0; i < num; i++) {
if(stu[i].flag == 0) {
cout << stu[i].id << " " << stu[i].program << " " << stu[i].Gm << " ";
cout << stu[i].Gf << " " << stu[i].grade << endl;
}
}
return 0;
}