要注意主要是取百分比的时候需要进位。按四舍五入的规则就好。
#include <iostream>
#include <cstring>
#include <climits>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <set>
#define MAX 10010
using namespace std;
int p,m,n;
struct node{
string id;
int gp,gm,gf,final;
node(){gp=gm=gf=-1;};
};
node list[MAX];
int r = 1;
map <string,int> str2int;
bool cmp(node n1 ,node n2){
if(n1.final != n2.final)
return n1.final > n2.final;
else
return n1.id < n2.id;
}
int main(){
scanf("%d%d%d",&p,&m,&n);
for(int i = 0 ;i < p ;i ++){
string id;
int gp;
cin >> id >> gp;
if(gp >= 200){
list[r].id = id;
list[r].gp = gp;
str2int[id] = r++;
}
}
for(int i = 0 ;i < m ;i++){
string id;
int gm;
cin >> id >> gm;
int no = str2int[id];
if(no != 0){
list[no].gm = gm;
}
}
for(int i = 0 ;i < n ;i++){
string id;
int gf;
cin >> id >> gf;
int no = str2int[id];
if(no != 0){
list[no].gf = gf;
}
}
for(int i = 1; i < r;i++){
if(list[i].gm > list[i].gf){
list[i].final = list[i].gm * 40 + list[i].gf * 60;
if(list[i].final % 100 >= 50){
list[i].final = list[i].final / 100 + 1;
}
else
list[i].final = list[i].final / 100;
}
else
list[i].final = list[i].gf;
}
sort(list + 1 ,list + 1 + r,cmp);
for(int i = 1; i < r;i++){
if(list[i].final >= 60)
cout << list[i].id << " " << list[i].gp << " " << list[i].gm << " " << list[i].gf << " " << list[i].final << endl;
}
return 0;
}