题目大意
给出学生的C
、M
、E
的成绩,要求出其中某些学生的最好排名(C
、M
、E
、A
,A
是C
、M
、E
的平均值,最好排名是指在C
、M
、E
、A
这四个排名中最小的那个)
输入
每组包含一个测试用例,每个用例的第一行是2个数
N
N
N和
M
M
M(
≤
2000
\leq 2000
≤2000),分别表示学生的总数和查询最好排名的学生数。接着
N
N
N行,每一行是学生的ID(长度为6的字符串),然后跟着3个整数(范围是
[
0
,
100
]
[0, 100]
[0,100])表示学生的C
、M
、E
成绩。之后又有
M
M
M行,每行是一个学生的ID
输出
对要查询的
M
M
M个学生在一行中输出他的最好排名和最好排名是哪一门(C
、M
、E
、A
),如果最好排名不止一门就按照A
>C
>M
>E
的优先级输出最高的那一门,如果要查询的学生ID不在给的
N
N
N个学生之中,就输出N/A
样例输入
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
样例输出
1 C
1 M
1 E
1 A
3 A
N/A
解析
按照优先级排序就完事了,注意A
的成绩是其他三门成绩的平均值并四舍五入
class student:
def __init__(self, C, M, E, ID):
self.grade = [round((C + M + E) / 3), C, M, E]
self.id = ID
self.rank = [-1, -1, -1, -1]
def solve():
line = input().split(" ")
n = int(line[0])
m = int(line[1])
students = {}
for i in range(n):
line = input().split(" ")
ID = line[0]
C = int(line[1])
M = int(line[2])
E = int(line[3])
s = student(C, M, E, ID)
students[ID] = s
for x in range(4):
p = sorted(students.values(), key=lambda i: -i.grade[x])
p[0].rank[x] = 1
for i in range(1, n):
p[i].rank[x] = i + 1
if p[i].grade[x] == p[i - 1].grade[x]:
p[i].rank[x] = p[i - 1].rank[x]
for i in range(m):
line = input()
try:
unit = students[line]
temp = zip(unit.rank, ['0A', '1C', '2M', '3E'])
temp = sorted(temp)
print(str(min(unit.rank)), temp[0][1][1])
except:
print('N/A')
if __name__ == "__main__":
solve()