一、题目描述
一个有N个选手参加比赛,选手编号为1~N(3<=N<=100),有M(3<=M<=10)个评委对选手进行打分。
打分规则为每个评委对选手打分,最高分10分,最低分1分。
请计算得分最多的3位选手的编号。如果得分相同,则得分高分值最多的选手排名靠前
(10分数量相同,则比较9分的数量,以此类推。用例中不会出现多个选手得分完全相同的情况)。
二、输入描述
第一行为半角逗号分割的两个正整数,第一个数字表示M(3<=M<=10)个评委,第二个数字表示N(3<=N<=100)个选手。
第2到M+1行为半角逗号分割的整数序列,表示评委为每个选手的打分,0号下标数字表示1号选手分数,1号下标表示2号选手分数,依次类推。
三、输出描述
选手前3名的编号。
注:若输入异常,输出-1,如M、N、打分不在范围内。
四、解题思路
使用 Player 类保存每位选手的信息:编号 id、总分 total、分数频次数组 freq[1…10]。
频次数组用于“同分时按高分多者优先”的逐级比较需求,天然匹配题意。
- 遍历 M 行评分数据,累加每位选手的总分并统计每个分值的出现次数,时间 O(M*N)。
- 排序:对 N 位选手按如下比较器排序
- total 降序;
- 从 10 到 1,按 freq[s] 降序逐项比较;
订阅专栏 解锁全文
657

被折叠的 条评论
为什么被折叠?



