#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
struct node{
string name;
int grade1,grade2,grade3,grade;
node(){
grade2=grade3=grade=-1;
}
}stu[10010];
bool cmp(node a,node b){
if(a.grade!=b.grade) return a.grade>b.grade;
else return a.name<b.name; //写错
}
int main(){
int p,m,n;
string str;
int k;
map<string,int> lst;//保存学生存入结构体node的下标
map<string,int> hashtable;
scanf("%d%d%d",&p,&m,&n);
int cnt=0;
for(int i=0;i<p;i++){
cin>>str>>k;
if(k>=200){
stu[cnt].name=str;
stu[cnt].grade1=k;
lst[str]=cnt;
hashtable[str]++;
cnt++;
}
}
for(int i=0;i<m;i++){
cin>>str>>k;
if(hashtable[str]!=0){
stu[lst[str]].grade2=k;
}
}
for(int i=0;i<n;i++){
cin>>str>>k;
if(hashtable[str]!=0){
stu[lst[str]].grade3=k;
if(stu[lst[str]].grade3>=stu[lst[str]].grade2){
stu[lst[str]].grade=stu[lst[str]].grade3;
}else{
stu[lst[str]].grade=int(0.4*stu[lst[str]].grade2+0.6*stu[lst[str]].grade3+0.5);
}
}
}
sort(stu,stu+cnt,cmp);
for(int i=0;i<cnt;i++){
if(stu[i].grade>=60){
cout<<stu[i].name<<" "<<stu[i].grade1<<" "<<stu[i].grade2<<" "<<stu[i].grade3<<" "<<stu[i].grade<<endl;
}
}
return 0;
}
第一次,独立完成
因为else return a.name<b.name; //写错成
else a.name<b.name; 卡掉我1一小时