题目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))