PAT 1012

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <string.h>

typedef struct{
	char id[10];
	int c;
	int m;
	int e;
	int a;
	int best;
	char bestCourse;
}stu;

int cmpA(const void * x, const void * y){
	return ((*(stu *)y).a - (*(stu *)x).a);
}
int cmpC(const void * x, const void * y){
	return ((*(stu *)y).c - (*(stu *)x).c);
}
int cmpM(const void * x, const void * y){
	return ((*(stu *)y).m - (*(stu *)x).m);
}
int cmpE(const void * x, const void * y){
	return ((*(stu *)y).e - (*(stu *)x).e);
}
int main(){
	//freopen("in.txt","r",stdin);

	int n,m;
	int i;
	stu stus[2001];
	char obj[10];

	scanf("%d %d",&n,&m);
	for(i=0;i<n;i++){
		scanf("%s %d %d %d",stus[i].id,&stus[i].c,&stus[i].m,&stus[i].e);
		stus[i].a = (stus[i].c + stus[i].m + stus[i].e)/3;
		stus[i].best = 1000; 
		stus[i].bestCourse = '0';
	}

	int curGrade;//         
	int curScore;

	qsort(stus,n,sizeof(stu),cmpA);
	curGrade = 1;
	curScore = stus[0].a;
	for(i=0;i<n;i++){
		//if(stus[i].a < curScore){ curGrade++; curScore = stus[i].a;}
		if(stus[i].a < curScore){ curGrade = i+1; curScore = stus[i].a;}//         ,            (   1!),      
		if(stus[i].best > curGrade) {
			stus[i].best = curGrade;
			stus[i].bestCourse = 'A';
		}
	}

	qsort(stus,n,sizeof(stu),cmpC);
		curGrade = 1;
	curScore = stus[0].c;
	for(i=0;i<n;i++){
		if(stus[i].c < curScore){ curGrade = i+1; curScore = stus[i].c;}
		if(stus[i].best > curGrade) {
			stus[i].best = curGrade; 

			stus[i].bestCourse = 'C';
		}
	}

	qsort(stus,n,sizeof(stu),cmpM);
		curGrade = 1;
	curScore = stus[0].m;
	for(i=0;i<n;i++){
		if(stus[i].m < curScore){ curGrade = i+1; curScore = stus[i].m;}
		if(stus[i].best > curGrade) {
			stus[i].best = curGrade;
			stus[i].bestCourse = 'M';
		}
	}

	qsort(stus,n,sizeof(stu),cmpE);
		curGrade = 1;
	curScore = stus[0].e;
	for(i=0;i<n;i++){
		if(stus[i].e < curScore){ curGrade = i+1; curScore = stus[i].e;}
		if(stus[i].best > curGrade) { 
			stus[i].best = curGrade;
			stus[i].bestCourse = 'E';
		}
	}

	while(0 < m--){
		scanf("%s",obj);
		for(i=0; i<n; i++){
			if (strcmp(obj,stus[i].id) == 0){
				printf("%d %c
",stus[i].best,stus[i].bestCourse); break; } } if(i==n){ printf("N/A
"); } } return 0; }

좋은 웹페이지 즐겨찾기