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 排名算法工作原理>之后的又一篇关于排名算 ...
随机推荐
- ios webview点击图片看大图效果及相应手势操作
下面参考资料有比较详细的解释,在之前的就项目中也有比较好的效果(支持更多手势),可以参考下 参考资料
- java 网络编程 模拟browser
--java模拟实现browser,主要代码: package socket; import java.io.*; import java.net.*; public class MyHttpClie ...
- centos搭建本地库
--2013年8月23日11:00:26环境:centos6.3(64bit)--场景默认情况下在用yum install 安装软件会从配置库中下载依赖包默认依赖库:来自网络在本地搭建依赖库可以节约带 ...
- javaweb学习总结十九(http协议概述以及http请求信息分析)
一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...
- [改善Java代码]equals应该考虑null值的情景
建议46: equals应该考虑null值情景 继续上一建议的问题,我们解决了覆写equals的自反性问题,是不是就很完美了呢?再把main方法重构一下: public class Client { ...
- [改善Java代码]慎用动态编译
建议17: 慎用动态编译 //=========这篇博文暂时理解不透......... 动态编译一直是Java的梦想,从Java 6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行. ...
- 关于Talend的Patch分支对应Eclipse开发环境的配置总结.
给产品打patch有时候会遇到很多问题,给产品打patch而且大多数是给很多老版本的Studio打,而且要有对应的patch的开发环境. 但是不巧有些patch对应的git仓库目录结构和一些其他版本的 ...
- hdu1565 网络流或状态压缩DP
对于网络流有一个定理: 最小点权覆盖集=最大网络流: 最大点权独立集=总权值-最小点权覆盖集: 网络流解法代码如下: #include<cstdio> #include<iostre ...
- 踩到两只“bug”
近期在修复ex和头儿的代码时,碰到两个特别点的bug,其实也不能称之为bug,非常简单的用法,稍不严谨点可能就出错了. 第一个是in_array,大家都知道功能是检查一个值是否在数组中,第三个参数传入 ...
- 在Ubuntu中USB连接手机调试
1.打开手机USB调试功能 显示“开发者选项”(开发者选项默认隐藏,一般需要进入到“设置”-->“关于手机”连续点击七次,可将“开发者选项显示出来”) 将“开发者选项”设置为“开启”状态 打开U ...