PAT甲级1012. The Best Rank
PAT甲级1012. The Best Rank
题意:
为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C  -  C编程语言,M  - 数学(微积分或线性代数)和E  - 英语。同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说,
在三个课程和平均成绩的四个职级中,我们打印每个学生的最佳排名。
例如,C,M,E和A - 4名学生的成绩如下:
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
那么所有学生的最佳排名都是第一,因为第一名在C编程语言方面做得最好,而第二名则是数学第二名,英文第三名,平均第三名。
输入
每个输入文件包含一个测试用例。每个案例以包含2个数字N和M(<= 2000)的行开始,
分别是学生人数和学生人数。然后按N行,每个包含一个6位数字的学生ID,其后是C,M和E顺序的该学生的三个整数等级(在[0,100]范围内)。然后在那里是M行,每行包含学生ID
。
输出
对于每个M学生,以一行打印他/她的最佳排名,以及由空格分隔的相应排名的符号。
排名方法的优先级排序为A> C> M> E。因此,如果学生获得相同最佳排名有两种或更多种方式,则输出优先级最高的排名。
如果学生不在评分清单上,只需输出“N / A”即可。
思路:
麻烦的地方就是排序了,我写的好丑。题意中排名方法的优先级排序为A> C> M> E 可以通过构造一个count[4]数组的方法来实现。只要当前下标下的数比后面的数都要小于或这等于就可以成立。
ac代码:
C++
// pat1012.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<unordered_map>
using namespace std;
struct stu {
	string id;
	int c;
	int m;
	int e;
	int a;
	char bestsub;
	int best;
};
void getbest(vector<stu>& map)
{
	char ans[4] = { 'A','C','M','E' };
	int len = map.size();
	for (int i = 0; i < len; i++)
	{
		//c = m = e = a = 1;
		int count[4] = { 1,1,1,1 };
		for (int j = 0; j < len; j++)
		{
			if (map[j].a > map[i].a)
			{
				count[0]++;
			}
			if (map[j].c > map[i].c)
			{
				count[1]++;
			}
			if (map[j].m > map[i].m)
			{
				count[2]++;
			}
			if (map[j].e > map[i].e)
			{
				count[3]++;
			}
		}
		for (int k = 0; k < 4; k++)
		{
			int u = k + 1;
			for (; u < 4; u++)
			{
				if (count[k] > count[u]) break;
			}
			if (u >= 4)
			{
				map[i].bestsub = ans[k];
				map[i].best = count[k];
				break;
			}
		}
	}
}
int main()
{
	int N, M,n;
	cin >> N >> M;
	n = N;
	vector<stu> map;
	while (N--)
	{
		stu s;
		cin >> s.id >> s.c >> s.m >> s.e;
		s.a = (s.c + s.m + s.e) / 3;
		map.push_back(s);
	}
	getbest(map);
	string tempid;
	while (M--)
	{
		cin >> tempid;
		int i = 0;
		for (; i < n; i++)
		{
			if (map[i].id == tempid)
			{
				cout << map[i].best << " " << map[i].bestsub << endl;
				break;
			}
		}
		if (i >= n)
			cout << "N/A" << endl;
	}
    return 0;
}
PAT甲级1012. The Best Rank的更多相关文章
- PAT 甲级 1012 The Best Rank
		https://pintia.cn/problem-sets/994805342720868352/problems/994805502658068480 To evaluate the perfor ... 
- PAT 甲级 1012 The Best Rank (25 分)(结构体排序)
		题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ... 
- PAT甲级——1012 The Best Rank
		PATA1012 The Best Rank To evaluate the performance of our first year CS majored students, we conside ... 
- PAT——甲级1012:The Best Rank(有坑)
		1012 The Best Rank (25 point(s)) To evaluate the performance of our first year CS majored students, ... 
- 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 ... 
- pat甲级1012
		1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ... 
- 【PAT】1012. The Best Rank (25)
		题目链接: http://pat.zju.edu.cn/contests/pat-a-practise/1012 题目描述: To evaluate the performance of our fi ... 
- PAT甲级——A1012 The Best Rank
		To evaluate the performance of our first year CS majored students, we consider their grades of three ... 
- PAT甲级1012题解——选择一种合适数据存储方式能使题目变得更简单
		题目分析: 本题的算法并不复杂,主要是要搞清楚数据的存储方式(选择一种合适的方式存储每个学生的四个成绩很重要)这里由于N的范围为10^6,故选择结构体来存放对应下标为学生的id(N只有2000的范围, ... 
随机推荐
- layui利用jQuery设置下拉列表的值
			今天在利用jQuery动态设置下拉列表的值的时候确怎么也赋值不上去,其中用到了layui框架,源代码如下: $.post(contextPath+'/courseLibrary/getCourseBa ... 
- Linux实用命令之xdg-open
			为什么要介绍 xdg-open 呢,得先从需求说起. 一般在控制台中,可以使用命令操作各式文本文件.但难以避免,需要操作一些非文本文件,如 pdf,doc 等. 此时,一般的做法是,打开文件管理器,再 ... 
- 移动端测试===adb  shell top命令解释
			adb shell top top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序. top 用法 >a ... 
- hdu 4347  The Closest M Points   (kd树)
			版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4347 题意: 求k维空间中离所给点最近的m个点,并按顺序输出 . 解法: kd树模板题 . 不懂kd树的可以先看看这个 . 不多说, ... 
- java版云笔记(八)之关联映射
			Mybatis关联映射 通过数据库对象之间的关联关系,反映到到实体对象之间的引用. 加载多个表中的关联数据,封装到我们的实体对象中. 当业务对数据库进行关联查询. 关联 <association ... 
- HDU 1285 确定比赛名次(拓扑排序模板)
			题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意:有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行 ... 
- 【数据挖掘基础算法】KNN最近邻分类算法
			算法简介: 通过计算待预测样本和已知分类号的训练样本之间的距离来判断该样本属于某个已知分类号的概率.并选取概率最大的分类号来作为待预测样本的分类号 懒惰分类算法,其模型的建立直到待预测实例进行预测时才 ... 
- MVC – 7.Razor 语法
			7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ... 
- [翻译]HLS实践
			最近公司项目没事做,课余实践研究一下技术,算是积累,也可以用到项目里,从零开始记录 HLS:Http Live Streaming 官方文档 https://developer.apple.com/s ... 
- Git & GitHub 学习
			学习资料: Git版本控制软件结合GitHub从入门到精通常用命令学习手册:http://www.ihref.com/read-16369.html 官方中文手册:http://git-scm.com ... 
