#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
char mp[10]={'A','C','M','E'};
struct node
{
int id;
int score[4];//分别是ACME
int rankk[4];//分别是ACME的排名
}T[2005];
int book[1000005]={0};
int Rank[1000005][4];
int now;
bool cmp(node a,node b)
{
return a.score[now] > b.score[now];
}
int main()
{
// freopen("in.txt","r",stdin);
int N,M;
scanf("%d %d",&N,&M);
for(int i=0;i<N;i++)
{
int tid;
scanf("%d",&tid);
book[tid]=1;
T[i].id=tid;
scanf("%d %d %d",&T[i].score[1],&T[i].score[2],&T[i].score[3]);
T[i].score[0]=(T[i].score[1]+T[i].score[2]+T[i].score[3])/3;
}
for(int i=0;i<4;i++)
{
now=i;
sort(T,T+N,cmp);
T[0].rankk[now]=1;
for(int j=1;j<N;j++)
{
if(T[j].score[now]==T[j-1].score[now])
T[j].rankk[now]=T[j-1].rankk[now];
else
T[j].rankk[now]=j+1;
}
}
for(int i=0;i<N;i++)
{
Rank[T[i].id][0]=T[i].rankk[0];
Rank[T[i].id][1]=T[i].rankk[1];
Rank[T[i].id][2]=T[i].rankk[2];
Rank[T[i].id][3]=T[i].rankk[3];
}
while(M--)
{
int tid;
scanf("%d",&tid);
if(book[tid]==0)
printf("N/A\n");
else
{
//找出acme中最好的一门课,记录课的下标m
int m=0;
for(int j=1;j<4;j++)
{
if(Rank[tid][j]<Rank[tid][m])
m=j;
}
printf("%d %c\n",Rank[tid][m],mp[m]);
}
}
return 0;
}
1012. The Best Rank (25)
最新推荐文章于 2025-08-03 14:47:31 发布
本文介绍了一个用于ACM竞赛的评分系统实现方法,通过结构体存储队伍ID及各项得分,并利用排序算法来确定每支队伍在不同评判标准下的排名。最终能够查询并输出每个参赛队伍最佳排名所对应的类别。

4966

被折叠的 条评论
为什么被折叠?



