题目86

给定一个射击比赛成绩单
包含多个选手若干次射击的成绩分数
请对每个选手按其最高三个分数之和进行降序排名
输出降序排名后的选手id序列
条件如下
1.
一个选手可以有多个射击成绩的分数,且次序不固定
2.
如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手
3.
如果选手的成绩之和相等,则相等的选手按照其id降序排列

输入描述:
输入第一行
一个整数N
表示该场比赛总共进行了N次射击
产生N个成绩分数
2 <= N <= 100

输入第二行
一个长度为N整数序列
表示参与每次射击的选手id
0 <= id <= 99

输入第三行
一个长度为N整数序列
表示参与每次射击选手对应的成绩
0 <= 成绩 <= 100

输出描述:
符合题设条件的降序排名后的选手ID序列

示例一
输入:
13
3, 3, 7, 4, 4, 4, 4, 7, 7, 3, 5, 5, 5
53, 80, 68, 24, 39, 76, 66, 16, 100, 55, 53, 80, 55
输出:
5, 3, 7, 4
说明:
该场射击比赛进行了13次
参赛的选手为
{3, 4, 5, 7}
3
号选手成绩53, 80, 55
最高三个成绩的和为188
4
号选手成绩24, 39, 76, 66
最高三个成绩的和为181
5
号选手成绩53, 80, 55
最高三个成绩的和为188
7
号选手成绩68, 16, 100
最高三个成绩的和为184
比较各个选手最高3个成绩的和
有3号 = 5号 > 7号 > 4号
由于3号和5号成绩相等
且id5 > 3
所以输出5, 3, 7, 4

n = int(input())
l = list(map(int,input().split(",")))
L = list(map(int,input().split(",")))
d = {}
s = set(l)
for i in s:
    d[i] = []
index = 0
for i in l:
    d[i].append(L[index])
    index += 1
keys = list(d.keys())
values = list(d.values())
for i in range(len(values)):
    if len(values[i])<3:
        d.pop(keys(i))
    else:
        values[i].sort(reverse=True)
        value = sum(values[i][:3])
        d[keys[i]] = value
list1 = sorted(d.items(),key=lambda x : (x[1],x[0]),reverse=True)
list2 = [str(i[0]) for i in list1]
print(",".join(list2))

 

posted @ 2022-06-22 21:31  hoo_o  阅读(115)  评论(0编辑  收藏  举报