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 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)(排名算法)的更多相关文章
- 在MySQL中实现Rank高级排名函数【转】
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- 在MySQL中实现Rank高级排名函数
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- 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 ...
- pat1012. The Best Rank (25)
1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...
- A1012 The Best Rank (25)(25 分)
A1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...
- flink PageRank详解(批量迭代的页面排名算法的基本实现)
1.PageRank算法原理 2.基本数据准备 /** * numPages缺省15个测试页面 * * EDGES表示从一个pageId指向相连的另外一个pageId */ public clas ...
- 1012 The Best Rank (25分) vector与结构体排序
1012 The Best Rank (25分) To evaluate the performance of our first year CS majored students, we con ...
- 网页排名算法PagaRank
网页排名算法PageRank PageRank,网页排名,又叫做网页级别.是一种利用网页之间的超链接数据进行计算的方法.它是由Google的两位创始人提出的. 对于用户而言,网页排名一般是比较主观的, ...
- 2015最新百度搜索引擎(seo优化)排名算法
多少年来,对于弄清百度排名算法成为了一代又一代站长的最高目标.随着百度推出了搜索引擎网页质量**,直接揭开了神秘的百度排名算法,这是作为站长福音啊.现在小编就来为大家介绍一下. 首先想要得到直接需要的 ...
- 转:Reddit排名算法工作原理
http://www.aqee.net/how-reddit-ranking-algorithms-work/ 这是一篇继<Hacker News 排名算法工作原理>之后的又一篇关于排名算 ...
随机推荐
- css笔记04:属性选择器
1.属性选择器: 带有 title 属性的所有元素设置样式: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...
- Android之Handler探索
Handler背景理解: Handler被最多的使用在了更新UI线程中,但是,这个方法具体是什么样的呢?我在这篇博文中先领着大家认识一下什么是handler以及它是怎么样使用在程序中,起着什么样的作用 ...
- UVA 539 The Settlers of Catan dfs找最长链
题意:画边求最长链,边不能重复数点可以. 很水,用暴力的dfs即可,因为数据不大. 本来以为可以用floyd进行dp的,后来想想好像不能在有回路上的图跑...于是没去做. #include <c ...
- 开源IDE CodeBlocks的下载安装、配置、简单编程
如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑.编译.调试等功能集成在一个桌面环境上,这样就大大方便了用户.IDE一般包括代码编辑器.编译器.调试器和图形界面用户工 ...
- 微信小程序(原名微信应用号)开发工具0.9版安装教程
微信小程序全称微信公众平台·小程序,原名微信公众平台·应用号(简称微信应用号) 声明 微信小程序开发工具类似于一个轻量级的IDE集成开发环境,目前仅开放给了少部分受微信官方邀请的人士(据说仅200个名 ...
- <转>cookie和缓存解析
原文来自:http://www.cnblogs.com/cuihongyu3503319/archive/2008/04/18/1160083.html 缓存cache 为了提高访问网页的速度,浏览器 ...
- MyBatis(3.2.3) - Cache
Caching data that is loaded from the database is a common requirement for many applications to impro ...
- Jquery中bind和live的区别
Jquery中绑定事件有三种方法:以click事件为例 (1)target.click(function(){}); (2)target.bind("click",function ...
- (Android)View.getHeight或getWidth为0时的一些解决方案
在Android开发过程中,经常需要动态的更改View的大小,有些View的大小可能需要根据其他View的大小来设定,或者你需要得到一些View的大小来进行某项操作,但是有可能你需要在onCreate ...
- sql常识-Join
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据. Join 和 Key 有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join. 数据库中的表 ...