1012 卡了好久

版权声明:// Copyright © 2018年 Coding18. All rights reserved. https://blog.csdn.net/Coding18/article/details/85997682
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m;
struct student{
	int id;
	int grade[4];
}stu[2100];
int now = 0;
char cour[4] = {'A','C','M','E'};
int ranki[1000010][4] = {0};
bool cmp(struct student a, struct student b)
{
	 return a.grade[now] > b.grade[now];
}
int main() 
{
	scanf("%d %d",&n,&m);
	int u;
	for(int i= 0; i < n; i++){
		scanf("%d",&stu[i].id);
		scanf("%d %d %d",&stu[i].grade[1],&stu[i].grade[2],&stu[i].grade[3]);
		stu[i].grade[0] = (stu[i].grade[1] + stu[i].grade[2] + stu[i].grade[3]) / 3;
	}
	for(now = 0; now < 4; now++)
	{
		sort(stu,stu+n,cmp);
		ranki[stu[0].id][now] = 1;
		for(int i = 1; i < n; i++){
			if(stu[i].grade[now] == stu[i-1].grade[now])
			ranki[stu[i].id][now] = ranki[stu[i-1].id][now];
			else ranki[stu[i].id][now] = i + 1;
		}
	}
	for(int i = 0; i < m; i++){
		scanf("%d",&u);
		if(ranki[u][0] == 0) printf("N/A\n");
		else{
			int k = -1 ,min = 100000;
			for(int j = 0; j < 4; j++)
			{
				if(ranki[u][j] < min){
					k = j;
					min = ranki[u][j];
				}
			}
			printf("%d %c\n",min,cour[k]);
		}		
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Coding18/article/details/85997682