#dxy26003. 图书排行榜

图书排行榜

当前没有测试数据。

题目描述

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

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

排序规则(优先级从高到低,除特别说明外均为降序):

  1. 热门指数 = sales × 0.4 + rating × 20.0 + reviews × 0.3降序
  2. 若热门指数相同,按 sales 降序
  3. 若 sales 相同,按 rating 降序
  4. 若 rating 相同,按 书名 title 升序(字典序 A-Z)

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

输入格式

第一行:整数 N(1 ≤ N ≤ 10⁵)

接下来 N 行:每行包含书名(可能含空格,需用 getline 读取)、销量(整数)、评分(浮点数)、评论数(整数)

输出格式

N 行,每行:热门指数保留 1 位小数。

样例

样例1:

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

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

解释:
各书热门指数计算:
  C++ Primer:  500×0.4 + 4.8×20 + 200×0.3 = 200 + 96 + 60  = 356.0
  Python入门:  800×0.4 + 4.5×20 + 350×0.3 = 320 + 90 + 105 = 515.0
  算法导论:    300×0.4 + 4.9×20 + 500×0.3 = 120 + 98 + 150 = 368.0
  Java编程:    600×0.4 + 4.6×20 + 150×0.3 = 240 + 92 + 45  = 377.0

排序:Python入门(515.0) > Java编程(377.0) > 算法导论(368.0) > C++ Primer(356.0)

样例2(同分比较):

输入:
3
BookA 100 4.5 50
BookB 100 4.5 50
BookC 200 4.0 0

输出:
BookC 160.0
BookA 145.0
BookB 145.0

解释:
  BookA: 100×0.4 + 4.5×20 + 50×0.3 = 40+90+15 = 145.0
  BookB: 同上 = 145.0
  BookC: 200×0.4 + 4.0×20 + 0×0.3  = 80+80+0  = 160.0

BookC(160.0) 排第一。
BookA 和 BookB 热门指数相同(145.0),销量也相同(100),评分也相同(4.5),
按书名升序:BookA < BookB → BookA 在前,BookB 在后。

(注:样例2中 BookC 实际热门指数为 160.0 > 145.0,所以 BookC 排第一;两个 145.0 的书按规则依次比较)

数据范围与约束

参数 范围
N 1 ≤ N ≤ 10⁵
书名长度 1 ≤ len ≤ 50
sales 1 ≤ sales ≤ 10⁶
rating 0.0 ≤ rating ≤ 5.0(1位小数)
reviews 0 ≤ reviews ≤ 10⁵
时间复杂度要求 O(N log N)