1012. The Best Rank (25)

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 Algrbra), 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

题目不难,就是很烦。注意相同排名的处理。

代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 typedef struct Student{
 7     char ID[];
 8     double C,M,E,A;
 9 }Student;
 int search_rank(double *,double ,int);
 int search_ID(Student *,char *,int );
 int main()
 {
     double gradeC[],gradeM[],gradeE[],gradeA[];
     Student student[];
     int N,M,i;
     while(scanf("%d%d",&N,&M) != EOF){
         for(i=;i<N;++i){
             scanf("%s%lf%lf%lf",student[i].ID,&student[i].C,&student[i].M,&student[i].E);
             student[i].A = (student[i].C + student[i].M + student[i].E) / ;
             gradeC[i] = student[i].C;
             gradeM[i] = student[i].M;
             gradeE[i] = student[i].E;
             gradeA[i] = student[i].A;
         }
         sort(gradeC,gradeC+N);
         sort(gradeM,gradeM+N);
         sort(gradeE,gradeE+N);
         sort(gradeA,gradeA+N);
         char searchID[];
         int rank,minRank;
         char minRankOrder;
         int ID_index;
         for(i=;i<M;++i){
             scanf("%s",searchID);
             ID_index = search_ID(student,searchID,N);
             if(ID_index < ){
                 printf("N/A\n");
                 continue;
             }
             minRank = search_rank(gradeA,student[ID_index].A,N);
             minRankOrder = 'A';
             if(minRank == ){
                 printf("1 A\n");
                 continue;
             }
             rank = search_rank(gradeC,student[ID_index].C,N);
             if(rank < minRank){
                 minRank = rank;
                 minRankOrder = 'C';
             }
             if(minRank == ){
                 printf("1 C\n");
                 continue;
             }
             rank = search_rank(gradeM,student[ID_index].M,N);
             if(rank < minRank){
                 minRank = rank;
                 minRankOrder = 'M';
             }
             if(minRank == ){
                 printf("1 M\n");
                 continue;
             }
             rank = search_rank(gradeE,student[ID_index].E,N);
             if(rank < minRank){
                 minRank = rank;
                 minRankOrder = 'E';
             }
             printf("%d %c\n",minRank,minRankOrder);                
         }
     }
     return ;
 }
 
 int search_rank(double *data,double x,int n)
 {
     if(n <= )
         return -;
     int i = n-;
     while(i >=  && data[i--] != x);
     if(data[++i] == x)
         return n - i;
     else
         return -;
 }
 int search_ID(Student *data,char *ID,int n)
 {
     if(n <= )
         return -;
     int i=;
     while(i < n && strcmp(data[i++].ID,ID));
     if(!strcmp(data[--i].ID,ID))
         return i;
     else
         return -;
 }

PAT 1012的更多相关文章

  1. 浙大pat 1012题解

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  2. PAT 1012 数字分类 (20)(代码+测试点)

    1012 数字分类 (20)(20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求 ...

  3. PAT——1012. 数字分类

    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: ...

  4. PAT 1012. 数字分类 (20)

    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: ...

  5. PAT 1012. The Best Rank

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  6. PAT 1012 数字分类

    https://pintia.cn/problem-sets/994805260223102976/problems/994805311146147840 给定一系列正整数,请按要求对数字进行分类,并 ...

  7. PAT 1012 数字分类 C语言

    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...: ...

  8. PAT 1012 The Best Rank 排序

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  9. 【PAT】1012. The Best Rank (25)

    题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1012 题目描述: To evaluate the performance of our fi ...

随机推荐

  1. nginx多域名的配置方法

    方法一:多个.conf方法 1. 到/usr/local/nginx/ 新建一个目录 vhosts  并创建两个conf文件,如:wodejj.com.conf ,xiaobing.com.conf. ...

  2. 如何将域中的AD数据导入SharePoint

    转:http://www.cnblogs.com/wallis0922/archive/2010/09/29/1838292.html 最近刚装好sharepoint2010,想要研究一下,第一件想做 ...

  3. HDU 5317 RGCDQ

    题意:f(i)表示i的质因子个数,给l和r,问在这一区间内f(i)之间任意两个数最大的最大公倍数是多少. 解法:先用筛法筛素数,在这个过程中计算f(i),因为f(i)不会超过7,所以用一个二维数组统计 ...

  4. 非均匀B样条拟合MATLAB程序

    直接上代码,多的不再说了. %------------------非均匀B样条拟合MATLAB程序----------------- clear k=; x=load('data.txt'); [n, ...

  5. java jvm学习笔记二(类装载器的体系结构)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao                 在了解java虚拟机的类装载器之前,有一个概念我们是必须先知道的,就是java的沙箱,什 ...

  6. Android 数据传输之MessagePack使用

    介绍过什么是MessagePack之后,就进行Android与MessagePack的使用. 在MessagePack的官网上介绍MessagePack与Java结合使用的都是使用Maven作为JAR ...

  7. IComparer接口与

    IComparable比较接口,继承此接口可对lis<T>调用sort进行排序 或者调用sort时可以为sort方法提供继承了IComparer的比较器

  8. leetcode@ [295]Find Median from Data Stream

    https://leetcode.com/problems/find-median-from-data-stream/ Median is the middle value in an ordered ...

  9. nginx变量

    nginx的全局变量参数解释: $arg_PARAMETER#这个变量包含GET请求中,如果有变量PARAMETER时的值. $args   #这个变量等于请求行中(GET请求)的参数,例如foo=1 ...

  10. HDU5739-Fantasia(tarjan求割点)

    题意:给一个无向图n个点1~n,m条边,sigma(i*zi)%(1e9+7).zi是这个图删掉i点之后的价值.一个图的价值是所有连通子图的价值之和,连通图的价值是每个点的乘积. 题解:讲道理这题不算 ...