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

排名不应该只是简单的排序算法:

比如说  100,100,99,……   得99分是人是 第二名,而不是第三名。

所以,应该先对分数进行排序,然后在更新名次,算法如下:

      SS[].ra=; //第一个肯定是第一名

          int count=;

          for(i=;i<n;i++)

             {

                   if(SS[i].A==SS[i-].A)//A为平均分

                   {

                       SS[i].ra=SS[i-].ra;//ra 平均分排名

                   count++;//如果分数相同,那么名次和前一个相同,计数器++

                   }

                 else

                     {

                        SS[i].ra=SS[i-].ra+count;

                         count=;//计算器记得还原

                     }

          }

AC代码:

 #include <iostream>

 #include <algorithm>

 #include <string>

 using namespace std;

 struct stu

 {

    string ID;

    int A,C,M,E;

    int ra,rc,rm,re;

 };

 stu SS[];

 bool cmp1(stu a,stu b)

 {

     return a.A>b.A;

 }

 bool cmp2(stu a,stu b)

 {

     return a.C>b.C;

 }

 bool cmp3(stu a,stu b)

 {

     return a.M>b.M;

 }

 bool cmp4(stu a,stu b)

 {

     return a.E>b.E;

 }

 int main()

 {

       int n;

       while(cin>>n)

       {

             int m,i;

          cin>>m;

          for(i=;i<n;i++)

          {

                cin>>SS[i].ID>>SS[i].C>>SS[i].M>>SS[i].E;

          }

           for(i=;i<n;i++)

          {

                 SS[i].A=(SS[i].C+SS[i].M+SS[i].E)/;

                     SS[i].ra=;

                     SS[i].rc=;

                     SS[i].rm=;

                     SS[i].re=;

          }

        sort(SS,SS+n,cmp1);

          int count=;

          for(i=;i<n;i++)

             {

                   if(SS[i].A==SS[i-].A)

                   {

                       SS[i].ra=SS[i-].ra;

                               count++;

                   }

                 else

                     {

                        SS[i].ra=SS[i-].ra+count;

                         count=;

                     }

          }

             sort(SS,SS+n,cmp2);

           count=;

          for(i=;i<n;i++)

          {

              if(SS[i].C==SS[i-].C)

                   {

                       SS[i].rc=SS[i-].rc;

                               count++;

                   }

                 else

                     {

                        SS[i].rc=SS[i-].rc+count;

                         count=;

                     }

          }

             sort(SS,SS+n,cmp3);

          count=;

          for(i=;i<n;i++)

          {

              if(SS[i].M==SS[i-].M)

                   {

                       SS[i].rm=SS[i-].rm;

                               count++;

                   }

                 else

                     {

                        SS[i].rm=SS[i-].rm+count;

                         count=;

                     }

          }

             sort(SS,SS+n,cmp4);

          count=;

          for(i=;i<n;i++)

          {

              if(SS[i].E==SS[i-].E)

                   {

                       SS[i].re=SS[i-].re;

                               count++;

                   }

                 else

                     {

                        SS[i].re=SS[i-].re+count;

                         count=;

                     }

          }

               for(i=;i<m;i++)

          {

                   string goal;int j;

               cin>>goal;

                   for(j=;j<n;j++)

                         if(SS[j].ID==goal) break;

           if(j==n) cout<<"N/A"<<endl;

             else{           

                   char high='E';

                   int temp=SS[j].re;

                   if(temp>=SS[j].rm)

                   {

                      high='M';

                      temp=SS[j].rm;

                   }

                   if(temp>=SS[j].rc)

                   {

                      high='C';

                      temp=SS[j].rc;

                   }

                   if(temp>=SS[j].ra)

                   {

                      high='A';

                      temp=SS[j].ra;

                   }

                   cout<<temp<<" "<<high<<endl;

             }

          }

       }

   return ;

 }

The Best Rank (25)(排名算法)的更多相关文章

  1. 在MySQL中实现Rank高级排名函数【转】

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  2. 在MySQL中实现Rank高级排名函数

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  3. PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏

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

  4. pat1012. The Best Rank (25)

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

  5. A1012 The Best Rank (25)(25 分)

    A1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...

  6. flink PageRank详解(批量迭代的页面排名算法的基本实现)

    1.PageRank算法原理   2.基本数据准备 /** * numPages缺省15个测试页面 * * EDGES表示从一个pageId指向相连的另外一个pageId */ public clas ...

  7. 1012 The Best Rank (25分) vector与结构体排序

    1012 The Best Rank (25分)   To evaluate the performance of our first year CS majored students, we con ...

  8. 网页排名算法PagaRank

    网页排名算法PageRank PageRank,网页排名,又叫做网页级别.是一种利用网页之间的超链接数据进行计算的方法.它是由Google的两位创始人提出的. 对于用户而言,网页排名一般是比较主观的, ...

  9. 2015最新百度搜索引擎(seo优化)排名算法

    多少年来,对于弄清百度排名算法成为了一代又一代站长的最高目标.随着百度推出了搜索引擎网页质量**,直接揭开了神秘的百度排名算法,这是作为站长福音啊.现在小编就来为大家介绍一下. 首先想要得到直接需要的 ...

  10. 转:Reddit排名算法工作原理

    http://www.aqee.net/how-reddit-ranking-algorithms-work/ 这是一篇继<Hacker News 排名算法工作原理>之后的又一篇关于排名算 ...

随机推荐

  1. 渐进式jpeg(progressive jpeg)图片及其相关 --图片的两种加载方式

    渐进式jpeg(progressive jpeg)图片及其相关   一.基本JPEG(baseline jpeg)和渐进JPEG 网络上那些色色的照片都是.jpg格式的("色色"指 ...

  2. android 编写动画

    1.在编写动画的时候需要新建一个xml 新建的步骤是选中res单击右键选择Android resource file 然后弹出一个框 ,然后再Resource Type 里面选择Animation 然 ...

  3. 远程管理之VNC

    远程管理的基本概念 ①RDP(remote desktop protocol)协议 远程桌面协议,我们常用的windows操作系统就是的远程桌面管理就是基于该协议的,更多有关RDP协议的可以查看百度百 ...

  4. hdu 4604 动态规划

    思路:这题的感觉就是最长上升子序列的升级版.首先对于最长上升子序列要用n*log(n)的算法才行,这个复杂度的算法可以从hdu1025得到启发.然后就是什么情况下最优问题了.对于序列中某个数i,找出其 ...

  5. poj 3159 差分约束

    思路:班长的糖果要比snoopy的多.并且要用手写堆栈,且堆栈的大小要开到20000000. #include<iostream> #include<cstdio> #incl ...

  6. discuze回放提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”

    不知从哪里看到文章,但是实用: 背景:discuze就单纯的录制一个注册脚本,日志中没有报错,在报告中就提示"抱歉,您的请求来路不正确或表单验证串不符,无法提交"",以下 ...

  7. Android OOM 解决方案

    Out of Memory(内存溢出) 几乎是每个Android程序员都会遇到的事.在网上也能找到一大堆的解决方案,之前写过一篇<Android 内存溢出管理与测试>的博文.但感觉写得不是 ...

  8. sql2005导出数据字典

    右击要导出的数据库,点击 新建视图 粘贴下面代码 SELECT 表名= then d.name else '' end, 表说明= then isnull(f.value,'') else '' en ...

  9. Windows7 下配置添加ASP功能

    按照如下顺序添加 1.控制面板-程序-打开或关闭Windows功能 2.Internet信息服务-万维网服务-应用程序开发功能 3.勾选ASP 和ASP.net选项 确定后安装完毕即可支持.

  10. C# 线程--第二线程方法

    概述 上一章节中和大家分享了线程的基础使用方法.在这一章中来和大家分享线程的一些常用方法. 主要包括:线程阻塞,线程终止,线程锁三方面. Thread 的 Sleep 和 Join 方法 Thread ...