OD C卷【智能成绩表】

题目

小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名。
输入描述:

第一行输入学生人数n、科目数量m;

0<n<100; 0<m<10

第二行输入m个科目名称,以空格分开;科目只由英文字母构成,长度不超过10个字符,无重复的科目名称,且与后续输入的学生成绩一一对应;

第三行开始的n行,每行包含一个学生的姓名和该生m个科目的成绩,学生名只由英文字符构成,长度不超过10,且无重复;成绩在【0,100】的整数;

最后一行,输入排序的(单个)科目名称,若无科目名称,则按照总分排序;
输出描述:

按成绩排序的学生名字,空格分隔,成绩相同按名字字典序输出

示例1

输入:

3 2

yuwen shuxue

fangfang 95 90

xiaohua 88 95

minmin 100 82

shuxue

输出:

xiaohua fangfang minmin

说明:

按shuxue成绩排名,依次是xiaohua、fangfang、minmin

解题代码

python 复制代码
 
class Project:
    def __init__(self, id, scores):
        self.name = name 
        self.scores = scores
        self.idx = -1
        self.total_score = sum(scores)
 
def comp(a,b):
    if(a.idx != -1):
        if(a.scores[idx] != b.scores[idx]):
            if(a.scores[idx] > b.scores[idx]):
                return -1
            else:
                return 1
        else:
            if (a.name > b.name):
                return 1
            else:
                return -1
    else:
        if(a.total_score != b.total_score):
            if(a.total_score > b.total_score):
                return -1
            else:
                return 1
        else:
            if (a.name > b.name):
                return 1
            else:
                return -1
 
    
 
 
params1 = [int(x) for x in input().split(" ")]
n = params1[0]
m = params1[0]
all_project = []
all_study = input().split(" ")
 
for i in range(n):
    params = input().split(" ")
    name = params[0]
    j=1
    scores = []
    while(True):
        if(j>=m):
            break
        else:
            temp_score = int(params[j])
            scores.append(temp_score)
        j+=1
    
    all_project.append(Project(name, scores))
 
target_str = input()
idx = -1
for i in range(len(all_study)):
    if(target_str == all_study[i]):
        idx = i
        break
 
for i in all_project:
    i.idx = idx
#按照分数
all_project = sorted(all_project, key=functools.cmp_to_key(comp))
 
output_str = " "
for i in all_project:
    output_str += i.name + " "
print(output_str)
相关推荐
漂流瓶jz5 天前
UVA-120 煎饼 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·排序·aoapc·算法竞赛入门经典·uva
闻缺陷则喜何志丹6 天前
【排序 离散化 二维前缀和】 P7149 [USACO20DEC] Rectangular Pasture S|普及+
c++·算法·排序·离散化·二维前缀和
闻缺陷则喜何志丹8 天前
【排序】P6149 [USACO20FEB] Triangles S|普及+
c++·算法·排序·洛谷
Tairitsu_H10 天前
C语言:排序(一)
c语言·数据结构·排序
起个破名想半天了17 天前
算法与数据结构之排序
数据结构·排序算法·排序·算法与数据结构
问好眼25 天前
《算法竞赛进阶指南》0x05 排序-1.电影
c++·算法·排序·信息学奥赛
汉克老师1 个月前
GESP2026年3月认证C++五级( 第三部分编程题(2)找数)
c++·排序·双指针·二分算法·gesp5级·gesp五级
伟大的车尔尼1 个月前
双指针题目:满足条件的子序列数目
二分查找·排序·双指针
AKA__Zas2 个月前
初识基本排序
java·数据结构·学习方法·排序
元亓亓亓2 个月前
考研408--数据结构--day15--排序&内部排序(上)
数据结构·408·排序·内部排序