6488 - 编程挑战赛排名

题目描述

编程挑战赛有 n 名选手,给出每名选手的姓名、解题数和罚时。排名规则如下(依次比较):

  1. 解题数多的排在前;
  2. 解题数相同时,罚时少的排在前;
  3. 解题数和罚时都相同时,姓名字典序小的排在前。

请你输出排名之后的选手名单。

输入
  • 第一行:一个整数 n;
  • 接下来 n 行:每行三个部分,姓名、解题数、罚时,用空格分隔。 姓名只包含大小写英文字母和数字,长度不超过 20,且不含空格。
输出

共 n 行,按排名从高到低,每行输出该选手的「姓名 解题数 罚时」。

样例

输入

5
Alice 3 120
Bob 3 100
Cindy 4 200
David 3 100
Eve 2 50

输出

Cindy 4 200
Bob 3 100
David 3 100
Alice 3 120
Eve 2 50

输入

1
Solo 0 0

输出

Solo 0 0
说明

【样例 1 说明】:

Cindy 解题数最多(4 题)排第一;剩下三人都是 3 题,按罚时 Bob、David 的 100 小于 Alice 的 120;Bob 和 David 罚时相同,按姓名字典序 Bob 在前。

数据范围

1 \le n \le 100000;0 \le 解题数 \le 10;0 \le 罚时 \le 100000;姓名长度 \le 20,仅含英文字母和数字

考察点

结构体定义与使用;排序算法的比较函数;多关键字排序的判断顺序;字符串字典序比较。

提示

比较函数写成"前一个选手是否应排在前面",三个条件用 if 依次判断,只有前面的条件相等时才看后面的条件。

字典序:从第一个字符开始逐位比较,字符按 ASCII 码值比较(所以大写字母排在小写字母之前,如 Bob < David)。

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 19
通过人数 3
金币数量 1 枚
难度 入门


上一题 下一题