通过的代码:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <unordered_map>
#include <cmath>
using namespace std;
unordered_map <string, vector<int>> grades;
vector <int> q[4];
int getrank(vector<int> a,int x){
int l=0,r=a.size()-1;
while(l<r){
int mid = (r+l+1)>>1;
if(a[mid]<=x){
l=mid;//这里一定要记清楚
}else r=mid-1;//这里一定要记清楚
}
return a.size()-r;
}
int main ()
{
int n,m;
cin>>n>>m;
string id;
for(int i=0;i<n;i++)
{
string id;
int t[4] = {0};//不可以定义在外面,否则每次t[0]都不是0
cin >> id;
for (int j = 1; j < 4; j ++ )
{
cin >> t[j];
t[0] += t[j];
}
t[0] = round(t[0] / 3.0);//这里记得要写浮点数3.0
for(int k=0;k<4;k++)
{
grades[id].push_back(t[k]);
q[k].push_back(t[k]);
}
}
for(int i=0;i<4;i++) sort(q[i].begin(),q[i].end());
while (m--)
{
string id ;
cin>>id;
char name[]="ACME";
if(grades.count(id)==0){cout<<"N/A"<<endl;}
else{
int rank0=n+1;
int grade;
char c;
for(int i=0;i<4;i++)
{
int rank=getrank(q[i],grades[id][i]);
if(rank<rank0){
rank0=rank;
c=name[i];
}
}
cout<<rank0<<" "<<c<<endl;
}
}
}