#dxy26003. 图书排行榜

图书排行榜

在线书店书籍排序

题目描述

小明的在线书店需要对 NN 本书进行展示排序。每本书拥有四个属性:

属性 类型 说明
书名 title 字符串 由字母和空格组成,长度 50\le 50
月销量 sales 整数 正整数
用户评分 rating 浮点数 范围 [0.0,5.0][0.0, 5.0],精确到小数点后一位
评论数 reviews 整数 非负整数

排序规则(优先级从高到低,无特殊说明均为降序)

  1. 热门指数计算公式:$\text{hot} = \text{sales} \times 0.4 + \text{rating} \times 20.0 + \text{reviews} \times 0.3$,按热门指数降序
  2. 热门指数相同,按月销量 sales 降序
  3. 销量相同,按评分 rating 降序
  4. 评分相同,按书名 title 升序(字典序 A-Z)。

请按排序后的顺序输出每本书的书名与热门指数,热门指数保留 1 位小数。

输入格式

第一行一个整数 NN,代表书本总数。 随后共 2×N2 \times N 行,每两行为一本书的数据:

  1. 第一行:书名(包含空格,需完整读取整行);
  2. 第二行:三个数据,依次为月销量(整数)、用户评分(浮点数)、评论数(整数)。

输出格式

NN 行,每行输出书名保留1位小数的热门指数,中间用空格隔开。

样例输入 1

4
C++ Primer
500 4.8 200
Python入门
800 4.5 350
算法导论
300 4.9 500
Java编程
600 4.6 150

样例输出 1

Python入门 515.0
Java编程 377.0
算法导论 368.0
C++ Primer 356.0

样例1解释

各书籍热门指数计算:

  • C++ Primer:$500 \times 0.4 + 4.8 \times 20 + 200 \times 0.3 = 200 + 96 + 60 = 356.0$
  • Python入门:$800 \times 0.4 + 4.5 \times 20 + 350 \times 0.3 = 320 + 90 + 105 = 515.0$
  • 算法导论:$300 \times 0.4 + 4.9 \times 20 + 500 \times 0.3 = 120 + 98 + 150 = 368.0$
  • Java编程:$600 \times 0.4 + 4.6 \times 20 + 150 \times 0.3 = 240 + 92 + 45 = 377.0$

排序顺序:Python入门 > Java编程 > 算法导论 > C++ Primer

样例输入 2

3
BookA
100 4.5 50
BookB
100 4.5 50
BookC
200 4.0 0

样例输出 2

BookC 160.0
BookA 145.0
BookB 145.0

样例2解释

  • BookA:$100 \times 0.4 + 4.5 \times 20 + 50 \times 0.3 = 145.0$
  • BookB:计算结果同为 145.0145.0
  • BookC:$200 \times 0.4 + 4.0 \times 20 + 0 \times 0.3 = 160.0$

BookC 热门指数最高排在首位;BookA、BookB 前三关键字全部相等,按书名字典升序,BookA 在前。

数据范围与约束

参数 范围
NN 1N1051 \le N \le 10^5
书名长度 1len(title)501 \le \text{len(title)} \le 50
sales 1sales1061 \le \text{sales} \le 10^6
rating 0.0rating5.00.0 \le \text{rating} \le 5.0(仅一位小数)
reviews 0reviews1050 \le \text{reviews} \le 10^5
时间复杂度要求 O(NlogN)O(N \log N)