rank有名次的意思,记住了吗!
qwq好吧我第一次都没懂题,就是模拟,附上丑陋代码
还有一个教训是:用ios::sync_with_stdio(false);加速的时候,就不要在用scanf和printf啦!这次就出现了错误
具体解释见这个博客~:https://www.cnblogs.com/cytus/p/7763569.html
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N=2010;
struct A{
string id;
int C,M,E,A;
}stu[N];
int c[N],mm[N],e[N],a[N];
map<string,int>ran;
map<string,char>ke;
int main(){
int n,m;
ios::sync_with_stdio(false);
cin>>n>>m;
string s;
for(int i=0;i<n;i++){
cin>>stu[i].id;
cin>>stu[i].C>>stu[i].M>>stu[i].E;
c[i]=stu[i].C;mm[i]=stu[i].M;e[i]=stu[i].E;
stu[i].A=round((double)(stu[i].C+stu[i].M+stu[i].E)/3);
a[i]=stu[i].A;
}
sort(a,a+n);
sort(c,c+n);
sort(mm,mm+n);
sort(e,e+n);
for(int i=0;i<n;i++){//a,c,m,e
int r1=upper_bound(a,a+n,stu[i].A)-a;
r1=n-r1+1;
ran.insert(pair<string,int>(stu[i].id,r1));
ke.insert(pair<string,char>(stu[i].id,'A'));
if(r1==1)continue;
int r2=upper_bound(c,c+n,stu[i].C)-c;
r2=n-r2+1;
if(r2<ran[stu[i].id]){
ran[stu[i].id]=r2;
ke[stu[i].id]='C';
}
int r3=upper_bound(mm,mm+n,stu[i].M)-mm;
r3=n-r3+1;
if(r3<ran[stu[i].id]){
ran[stu[i].id]=r3;
ke[stu[i].id]='M';
}
int r4=upper_bound(e,e+n,stu[i].E)-e;
r4=n-r4+1;
if(r4<ran[stu[i].id]){
ran[stu[i].id]=r4;
ke[stu[i].id]='E';
}
}
while(m--){
cin>>s;
if(ran.find(s)==ran.end())cout<<"N/A"<<endl;
else cout<<ran[s]<<" "<<ke[s]<<endl;
}
}