#dxy26003. 图书排行榜
图书排行榜
当前没有测试数据。
题目描述
小明的在线书店需要对 N 本书进行展示排序。每本书有四个属性:
| 属性 | 类型 | 说明 |
|---|---|---|
书名 title |
字符串 | 由字母和空格组成,长度 ≤ 50 |
月销量 sales |
整数 | 正整数 |
用户评分 rating |
浮点数 | 范围 [0.0, 5.0],精确到小数点后一位 |
评论数 reviews |
整数 | 非负整数 |
排序规则(优先级从高到低,除特别说明外均为降序):
- 热门指数 =
sales × 0.4 + rating × 20.0 + reviews × 0.3(降序) - 若热门指数相同,按 sales 降序
- 若 sales 相同,按 rating 降序
- 若 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) |