// 1012_The Best Rank.cpp : 定义控制台应用程序的入口点。
//1012. The Best Rank (25)
//
//时间限制
//400 ms
//内存限制
//65536 kB
//代码长度限制
//16000 B
//判题程序
//Standard
//作者
//CHEN, Yue
//To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematics (Calculus or Linear Algebra), and E - English. At the mean time, we encourage students by emphasizing on their best ranks -- that is, among the four ranks with respect to the three courses and the average grade, we print the best rank for each student.
//
//For example, The grades of C, M, E and A - Average of 4 students are given as the following:
//
//StudentID C M E A
//310101 98 85 88 90
//310102 70 95 88 84
//310103 82 87 94 88
//310104 91 91 91 91
//Then the best ranks for all the students are No.1 since the 1st one has done the best in C Programming Language, while the 2nd one in Mathematics, the 3rd one in English, and the last one in average.
//
//Input
//
//Each input file contains one test case. Each case starts with a line containing 2 numbers N and M (<=2000), which are the total number of students, and the number of students who would check their ranks, respectively. Then N lines follow, each contains a student ID which is a string of 6 digits, followed by the three integer grades (in the range of [0, 100]) of that student in the order of C, M and E. Then there are M lines, each containing a student ID.
//
//Output
//
//For each of the M students, print in one line the best rank for him/her, and the symbol of the corresponding rank, separated by a space.
//
//The priorities of the ranking methods are ordered as A > C > M > E. Hence if there are two or more ways for a student to obtain the same best rank, output the one with the highest priority.
//
//If a student is not on the grading list, simply output "N/A".
//
//Sample Input
//5 6
//310101 98 85 88
//310102 70 95 88
//310103 82 87 94
//310104 91 91 91
//310105 85 90 90
//310101
//310102
//310103
//310104
//310105
//999999
//Sample Output
//1 C
//1 M
//1 E
//1 A
//3 A
//N/A
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "string.h"
#include "stdlib.h"
#include "string"
#include "algorithm"
using namespace std;
struct student{
char id[20];
int c,m,e;
float a;
int rank_c,rank_m,rank_e,rank_a;
}stu[2010];
bool cmp_c(student a,student b){
return a.c>b.c;
}
bool cmp_m(student a,student b){
return a.m>b.m;
}
bool cmp_e(student a,student b){
return a.e>b.e;
}
bool cmp_a(student a,student b){
return a.a>b.a;
}
int main()
{
int N,M;
char id[20];
cin>>N>>M;
for(int i = 0;i<N;i++){
cin>>stu[i].id>>stu[i].c>>stu[i].m>>stu[i].e;
stu[i].a = (stu[i].c+stu[i].m+stu[i].e) * 1.0/3;
}
int last_rank ,last_score;
sort(stu,stu+N,cmp_c);
stu[0].rank_c = 1;
last_rank = stu[0].rank_c;
last_score = stu[0].c;
for(int i = 1;i<N;i++){
if(stu[i].c<last_score){
stu[i].rank_c = i+1;
last_score = stu[i].c;
last_rank = i+1;
}
else{ //分数相等
stu[i].rank_c = last_rank;
}
}
sort(stu,stu+N,cmp_m);
stu[0].rank_m = 1;
last_rank = stu[0].rank_m;
last_score = stu[0].m;
for(int i = 1;i<N;i++){
if(stu[i].m<last_score){
stu[i].rank_m = i+1;
last_score = stu[i].c;
last_rank = i+1;
}
else{ //分数相等
stu[i].rank_m = last_rank;
}
}
sort(stu,stu+N,cmp_e);
stu[0].rank_e = 1;
last_rank = stu[0].rank_e;
last_score = stu[0].e;
for(int i = 1;i<N;i++){
if(stu[i].e<last_score){
stu[i].rank_e = i+1;
last_score = stu[i].e;
last_rank = i+1;
}
else{ //分数相等
stu[i].rank_e = last_rank;
}
}
sort(stu,stu+N,cmp_a);
stu[0].rank_a = 1;
last_rank = stu[0].rank_a;
last_score = stu[0].a;
for(int i = 1;i<N;i++){
if(stu[i].a<last_score){
stu[i].rank_a = i+1;
last_score = stu[i].a;
last_rank = i+1;
}
else{ //分数相等
stu[i].rank_a = last_rank;
}
}
for(int i = 0;i<M;i++){
cin>>id;
int flag = 0;
for(int i =0;i<N;i++){
if(!strcmp(stu[i].id,id)){
flag = 1;
if(stu[i].rank_a<=stu[i].rank_c && stu[i].rank_a<= stu[i].rank_m && stu[i].rank_a<=stu[i].rank_e)
cout<<stu[i].rank_a<<" "<<"A"<<endl;
else if(stu[i].rank_c<=stu[i].rank_m && stu[i].rank_c<=stu[i].rank_e)
cout<<stu[i].rank_c<<" "<<"C"<<endl;
else if(stu[i].rank_m<=stu[i].rank_e)
cout<<stu[i].rank_m<<" "<<"M"<<endl;
else
cout<<stu[i].rank_e<<" "<<"E"<<endl;
break;
}
}
if(!flag)
cout<<"N/A"<<endl;
}
return 0;
}
PAT_1012.The Best Rank
最新推荐文章于 2022-07-04 12:28:48 发布