PAT1012. The Best Rank

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

思路:需要理清结构思路,这道题总体来说不难,只是理清思路较为复杂,采取什么样的数据结构需要注意。另外:一定要注意全局变量和局部变量。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 struct student
 5 {
 6     int Id;
 7     int grade[4];
 8 }stu[10000];
 9 int now;
10 int Rank[10000000][4]={
11     0
12 };
13 char A[4]={
14     ‘A‘,‘C‘,‘M‘,‘E‘
15 };
16 bool cmp(student A,student B)
17 {
18     return A.grade[now]>B.grade[now];
19 }
20 int main(int argc, char *argv[])
21 {
22     int N,M;
23     scanf("%d%d",&N,&M);
24     for(int i=0;i<N;i++)
25     {
26            scanf("%d%d%d%d",&stu[i].Id,&stu[i].grade[1],&stu[i].grade[2],&stu[i].grade[3]);
27            stu[i].grade[0]=(stu[i].grade[1]+stu[i].grade[2]+stu[i].grade[3])/3;
28     }
29     for( now=0;now<4;now++)
30     {
31          sort(stu,stu+N,cmp);
32          Rank[stu[0].Id][now]=1;
33          for(int i=1;i<N;i++)
34          {
35              if(stu[i-1].grade[now]!=stu[i].grade[now])
36              {
37                   //Rank[stu[i].Id][now]=Rank[stu[i-1].Id][now]+1;
38                  Rank[stu[i].Id][now]=i+1;
39              }
40             else
41                  Rank[stu[i].Id][now]=Rank[stu[i-1].Id][now];
42           }
43     }
44     for(int i=0;i<M;i++)
45     {
46         int Id;
47         scanf("%d",&Id);
48         if(Rank[Id][0]==0)
49         {
50             printf("N/A\n");
51         }
52         else
53         {
54             int min=0;
55             for(int j=0;j<4;j++)
56             {
57                 if(Rank[Id][j]<Rank[Id][min])
58                 {
59                     min=j;
60                 }
61             }
62             printf("%d %c\n",Rank[Id][min],A[min]);
63         }
64     }
65
66     return 0;
67 }

时间: 2024-10-19 18:56:52

PAT1012. The Best Rank的相关文章

pat1012. The Best Rank (25)

1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematic

PAT-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 e

LeetCode:Rank Scores - 按分数排名次

1.题目名称 Rank Scores(按分数排名次) 2.题目地址 https://leetcode.com/problems/rank-scores/ 3.题目内容 按分数排名次,如果两个Id的分数一样,那么他们的名次是一样的,排名从1开始.注意,每组分数的名次,都是上一组分数名次加一. 例如,有这样一组数据: +----+-------+ | Id | Score | +----+-------+ | 1  | 3.50  | | 2  | 3.65  | | 3  | 4.00  | | 

【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现

前一篇文章"Learning to Rank中Pointwise关于PRank算法源码实现"讲述了基于点的学习排序PRank算法的实现.该篇文章主要讲述Listwise Approach和基于神经网络的ListNet算法及Java实现.包括: 1.基于列的学习排序(Listwise)介绍 2.ListNet算法介绍 3.ListNet算法Java实现 LTR中单文档方法是将训练集里每一个文档当做一个训练实例,文档对方法是将同一个查询的搜索结果里任意两个文档对作为一个训练实例,文档列方法

HDU 1811 Rank of Tetris(并查集按秩合并+拓扑排序)

Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9267    Accepted Submission(s): 2668 Problem Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想

(HDU)1718 -- Rank (段位)

题目链接:https://vjudge.net/problem/HDU-1718 这题还好,不用考虑字典序排名(可以并列排名),看到有的人用了结构体或二重数组,介于这题的特殊性,其实不用这样. #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <string> #include

Rank 获取排序的序号

Select *,RANK() over (partition by 分组列名 order by 排序列名) as rn from [Table] 例如:获取按…分组的按…排序的每组的前2条记录 select Table1.* from ( select *,RANK() over (partition by a.列1,a.列2, order by a.列3) as rn from Table1 ) as Table2  where rn < 3

learning to rank

Learning to Rank入门小结 + 漫谈 Learning to Rank入门小结 Table of Contents 1 前言 2 LTR流程 3 训练数据的获取4 特征抽取 3.1 人工标注 3.2 搜索日志 3.3 公共数据集 5 模型训练 5.1 训练方法 5.1.1 Pointwise 5.1.2 Pairwise 5.1.3 Listwise 6 效果评估7 参考 6.1 NDCG(Normalized Discounted Cumulative Gain) 6.1.1 定

1012——The Best Rank

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 e