1012. The Best Rank

#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
const char p[]={'A','C','M','E'};
struct node{ int id,g[4],r[4];};
int main(){
  int n,m;cin>>n>>m;
  vector<node>st(n);
  for(auto &x:st){
    cin>>x.id>>x.g[1]>>x.g[2]>>x.g[3];
    x.g[0]=(x.g[1]+x.g[2]+x.g[3])/3;
  }
  for(int i=0;i<4;++i){
    sort(st.begin(),st.end(),[=](const node&x,const node&y){return x.g[i]>y.g[i];});
    for(int j=1;j<st.size();++j)
      st[j].r[i]=(st[j].g[i]==st[j-1].g[i]?st[j-1].r[i]:j);
  }
  unordered_map<int,pair<int,int>>rrank;
  for(auto &x:st){
    auto it=min_element(x.r,x.r+4);
    rrank[x.id]={it-x.r,*it};
  }
  while(m--){
    int id;cin>>id;
    auto it=rrank.find(id);
    if(it==rrank.end())cout<<"N/A"<<endl;
    else cout<<it->second.second+1<<' '<<p[it->second.first]<<endl;
  }
}

你可能感兴趣的:(1012. The Best Rank)