P1182 结构体-排序(sort + 比较函数)-学生成绩排序

暂无评定 传统题 GESP结构体排序 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

P1182结构体-排序(sort + 比较函数)-学生成绩排序

暂无评定 传统题 GESP结构体排序 上传者
时间限制1000ms
内存限制256MiB
通过 / 提交0/0

题目描述

定义一个结构体 Student,包含以下成员:

  • string name(姓名)
  • int chinese(语文成绩)
  • int math(数学成绩)

输入 n 个学生的信息,按照以下规则从高到低排序:

  1. 总分(语文+数学)高的排在前面。
  2. 如果总分相同,语文成绩高的排在前面。
  3. 如果语文成绩也相同,姓名字典序小的排在前面。

排序后,输出每个学生的姓名、语文、数学、总分,每行一个学生。

输入

第一行一个整数 n(1 ≤ n ≤ 1000)。
接下来 n 行,每行一个学生的姓名(不含空格,长度≤20)、语文成绩、数学成绩,用空格隔开。
成绩均为 0 到 100 之间的整数。

输出

共 n 行,每行格式为:姓名 语文 数学 总分,中间用空格隔开。
输出顺序必须符合排序规则。

样例输入

4
Alice 90 80
Bob 85 85
Charlie 90 85
David 85 90

样例输出

Charlie 90 85 175
David 85 90 175
Alice 90 80 170
Bob 85 85 170

样例解释:

  • Charlie 和 David 总分都是 175,Charlie 语文 90 > David 语文 85,所以 Charlie 在前。
  • Alice 和 Bob 总分都是 170,Alice 语文 90 > Bob 语文 85,所以 Alice 在前。

要求

  • 定义 struct Student。
  • 必须使用 sort 函数。
  • 必须编写自定义比较函数 bool cmp(const Student &a, const Student &b) 实现排序规则。

提示

  • 比较函数返回值:若 a 应该排在 b 前面,则返回 true,否则 false。
  • 本题规则可以翻译为:
    if (a总分 != b总分) return a总分 > b总分;
    else if (a.语文 != b.语文) return a.语文 > b.语文;
    else return a.name < b.name;