#2922. 奖学金

奖学金

版权信息

[NOIP2007]奖学金

任务总览

任务名称 时间限制 内存限制 分数
[NOIP 2007] 奖学金 1000ms 256MB 300

题目描述

某小学最近得到了赞助,打算拿出一部分资金为成绩优秀的前 5 名学生发奖学金。每个学生有 33 门课程的成绩(包括语文、数学和英语)。任务是:首先按总分从高到低排序;如果总分相同,再按语文成绩从高到低排序;如果总分和语文成绩都相同,则学号较小的学生排在前面。最终输出前 5 名学生的学号和总分。

输入格式

  • 第 1 行:一个正整数 n (6 ≤ n ≤ 300),表示参加评选的学生人数。
  • 接下来 n 行,每行包含 3 个整数,分别是该学生的语文、数学和英语成绩。学号从 1 到 n,按输入顺序编号。

输出格式

  • 输出前 5 名学生的学号和总分。每行输出两个正整数,分别是学号和总分。

样例输入

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出

6 265
4 264
3 258
2 244
1 237

提示

  • 总分等于语文、数学和英语三科成绩之和。
  • 排序的规则是:
    1. 按总分降序排序。
    2. 如果总分相同,则按语文成绩降序排序。
    3. 如果总分和语文成绩都相同,则按学号升序排序。
  • 数据规模最大为 300 个学生,排序复杂度 O(n log n) 可以接受。

题目分析

  1. 输入​:每个学生有 3 门成绩。输入中包含学生的成绩以及学生数量。
  2. 排序​:
    • 对于每个学生,计算总分,并按总分、语文成绩以及学号排序。
    • 排序时,我们可以自定义排序的规则:首先是总分,其次是语文成绩,最后是学号。
  3. 输出​:输出前 5 名学生的学号和总分。

时间复杂度分析

  • 对于 n ≤ 300,排序的时间复杂度是 O(n log n),可以高效地完成任务。

结论

该问题的核心是排序问题,通过自定义排序规则,能够精确按照要求排序并输出结果。