OD 算法题 B卷【比赛】

文章目录

比赛

  • 有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)
相关推荐
CSharp精选营5 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假8 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠9 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦16 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠17 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾17 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82117 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q17 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒17 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记17 天前
单项不带头不循环链表
数据结构·链表