# 从输入中读取两个整数l和r,分别代表学生人数和后续要查询的学生ID数量。
l, r = map(int, input().split())
# 将学生信息存到students列表中,即students是一个列表的列表,不用新建一个类了
students = [list(map(int, input().split())) for _ in range(l)]
# 遍历students列表,为每个学生计算其平均成绩(三科成绩平均值四舍五入取整的结果)
# 并将该平均值作为新元素追加到对应学生的信息列表中。
for i, j in enumerate(students):
students[i].append(int(round(sum(j[1:]) / 3)))
# 定义一个函数Rank,用于根据学生的某项分数(由n指定)为学生排名,
# 并将排名结果作为新元素追加到每个学生的信息列表中。
def Rank(students, score_index):
# 根据score_index指定的成绩对学生进行降序排序。
students.sort(key=lambda item: item[score_index], reverse=True)
# 因为有并列排名的可能,所以要定义last和rank变量
last = rank = None # 初始化last和rank变量
# 遍历排序后的学生列表,为每个学生分配排名。
# 注意:由于使用了start=1,这里的i代表从1开始(但并不是从students列表中下标为1的元素开始遍历,而是下标为0的元素在这个循环中对应的i为1)
for i, j in enumerate(students, start=1):
# 如果当前学生的分数与上一个学生的分数不同,则更新last和rank。
if last != j[score_index]:
last, rank = j[score_index], i
# 由于enumerate的i是从1开始的,而列表索引是从0开始的,
# 因此需要使用i-1来找到正确的列表位置来追加排名。
students[i - 1].append(rank)
# 对学生的四项分数分别进行排名,并将排名结果追加到学生信息列表中。
for i in range(1, 5):
Rank(students, i)
# 对students列表进行处理,将其转换为一个字典。
processed_students = {}
from functools import cmp_to_key
priority = {'A': 4, 'C': 3, 'M': 2, 'E': 1}
def cmp(lhs, rhs):
if lhs[0] > rhs[0]:
return 1
elif lhs[0] == rhs[0] and priority[lhs[1]] < priority[rhs[1]]:
return 1
else:
return -1
# 遍历每个学生信息
for student_info in students:
# 提取学生的ID
student_id = student_info[0]
"""
若student_info[5:] = [1,4,3,3],则scores_and_ranks = [(1,'C'),(4,'M'),(3,'E'),(3,'A')]
"""
scores_and_ranks = list(zip(student_info[5:], "CMEA"))
# 对分数和排名信息进行排序,下面代码的意思是先按照排名进行升序排序,若排名相同,则按照A > C > M > E的优先级升序排序
sorted_scores_and_ranks = sorted(scores_and_ranks, key=lambda x: (x[0], "ACME".index(x[1])))
# sorted_scores_and_ranks = sorted(scores_and_ranks, key=cmp_to_key(cmp)) # 这两种排序写法是等价的,但是使用cmp_to_key函数这种写法时间效率低点
"""
若student_id = "310101"
则processed_students["310101"] = [(1,'C'),(3,'A'),(3,'E'),(4,'M')]
最后查询时,直接输出processed_students[id][0][0]和processed_students[id][0][1]即可
"""
# 将处理后的学生信息添加到字典中
processed_students[student_id] = sorted_scores_and_ranks
# 处理查询
for _ in range(r):
student_id = int(input())
if student_id in processed_students:
# 打印学生信息,使用*来解包元组中的所有元素。
print(*processed_students[student_id][0])
# 等价于print(processed_students[student_id][0][0],processed_students[student_id][0][1])
else:
print('N/A')