PAT1 1012 The Best Rank

题目链接
我的github

题目大意

给出学生的CME的成绩,要求出其中某些学生的最好排名(CMEAACME的平均值,最好排名是指在CMEA这四个排名中最小的那个)

输入

每组包含一个测试用例,每个用例的第一行是2个数 N N N M M M( ≤ 2000 \leq 2000 2000),分别表示学生的总数和查询最好排名的学生数。接着 N N N行,每一行是学生的ID(长度为6的字符串),然后跟着3个整数(范围是 [ 0 , 100 ] [0, 100] [0,100])表示学生的CME成绩。之后又有 M M M行,每行是一个学生的ID

输出

对要查询的 M M M个学生在一行中输出他的最好排名和最好排名是哪一门(CMEA),如果最好排名不止一门就按照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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值