1012 The Best Rank
这题就是对c,m,e,a做四次排序,每次记录排名
为了节约时间,开了map记录最后排名方便输出对应
测试样例2中对排名有要求,可能会出现1,1,3,4此类排名,注意即可
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node
{
int pos=0;
int c=0,cr=0;
int m=0,mr=0;
int e=0,er=0;
double a=0.0;
int ar=0;
}num[2005];
int a,b,c,d;
map<int,int>vis;
int cmpC(node a,node b)
{
return a.c>b.c;
}
int cmpA(node a,node b)
{
return a.a>b.a;
}
int cmpM(node a,node b)
{
return a.m>b.m;
}
int cmpE(node a,node b)
{
return a.e>b.e;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d %d %d %d",&num[i].pos,&num[i].c,&num[i].m,&num[i].e);
num[i].a=1.0*(num[i].c+num[i].m+num[i].e)/3;
}
sort(num+1,num+1+n,cmpC);
int inr=1;
for(int i=1;i<=n;i++)
{
if(num[i].c==num[i-1].c)
{
num[i].cr=num[i-1].cr;
inr++;
}
else
{
num[i].cr=num[i-1].cr+inr;
inr=1;
}
}
inr=1;
sort(num+1,num+1+n,cmpM);
for(int i=1;i<=n;i++)
{
if(num[i].m==num[i-1].m)
{
num[i].mr=num[i-1].mr;
inr++;
}
else
{
num[i].mr=num[i-1].mr+inr;
inr=1;
}
}
inr=1;
sort(num+1,num+1+n,cmpA);
for(int i=1;i<=n;i++)
{
if(num[i].a==num[i-1].a)
{
num[i].ar=num[i-1].ar;
inr++;
}
else
{
num[i].ar=num[i-1].ar+inr;
inr=1;
}
}
inr=1;
sort(num+1,num+1+n,cmpE);
for(int i=1;i<=n;i++)
{
if(num[i].e==num[i-1].e)
{
num[i].er=num[i-1].er;
inr++;
}
else
{
num[i].er=num[i-1].er+inr;
inr=1;
}
vis[num[i].pos]=i;
}
for(int j=1;j<=m;j++)
{
int a;
scanf("%d",&a);
int i=vis[a];
if(vis[a])
{
if(num[i].ar<=num[i].cr&&num[i].ar<=num[i].er&&num[i].ar<=num[i].mr)
printf("%d A\n",num[i].ar);
else if(num[i].cr<=num[i].mr&&num[i].cr<=num[i].er)
printf("%d C\n",num[i].cr);
else if(num[i].mr<=num[i].er)
printf("%d M\n",num[i].mr);
else
printf("%d E\n",num[i].er);
}
else
printf("N/A\n");
}
}