文章目录
比赛
- 有N个选手参加比赛,选手编号1-N (N在【3,100】),有M个评委进行打分(M在【3,10】),最高分10, 最低分1;
- 计算得分最多的3位选手的编号;
- 总分相同时,高分值多的排名靠前(10分数量相同,则比较9分,依次类推,不会出现多名分数相同);
输入描述:
第一行输入M,N
第二行开始输入M个评委对各个选手的打分;
输出描述:
前三名选手的编号,若输入异常则输出-1 (输入不再范围以内)
示例1
输入:
4,5
10,6,9,7,6
9,10,6,7,5
8,10,6,5,10
9,10,8,4,9
输出:
2,1,5
示例2
输入:
2,5
7,3,5,4,2
8,5,4,4,3
输出:
-1
python实现
- 以元组形式存储选手的编号、总分、分值列表,按照总分降序排序;
- 总分相等的继续比较分值列表(降序,并逐一比较);取前三个的编号;
python
m, n = list(map(int, input().strip().split(",")))
matrix = []
for _ in range(m):
matrix.append(list(map(int, input().strip().split(","))))
def input_ok(m, n, matrix):
if m < 3 or m > 10:
return False
if n < 3 or n >100:
return False
for i in range(m):
for j in range(n):
if matrix[i][j] < 1 or matrix[i][j] > 10:
return False
return True
def compare_arr(arr1, arr2):
arr1.sort(reverse=True)
arr2.sort(reverse=True)
for i in range(len(arr1)):
if arr1[i] == arr2[i]:
continue
elif arr1[i] > arr2[i]:
return True
return False
if input_ok(m, n, matrix):
# 计算
man_data = []
for i in range(n):
score = [i, 0, []]
for j in range(m):
score[1] += matrix[j][i]
score[2].append(matrix[j][i])
man_data.append(score)
man_data.sort(key=lambda i: i[1], reverse=True)
man_ids = []
for i in range(3):
if i == 2:
man_ids.append(man_data[i][0] + 1)
break
if man_data[i] > man_data[i+1]:
man_ids.append(man_data[i][0] + 1)
else:
# 相等的比较
if compare_arr(man_data[i][2], man_data[i+1][2]):
man_ids.append(man_data[i][0] + 1)
else:
man_ids.append(man_data[i+1][0] + 1)
man_data[i], man_data[i+1] = man_data[i+1], man_data[i]
print(",".join([str(i) for i in man_ids]))
else:
print(-1)