#B4473. [厦门小学生 C++ 2025] 矿石开采

[厦门小学生 C++ 2025] 矿石开采

题目描述

星际矿业公司在某星球发现了 n n 座矿石矿脉,每座矿脉初始蕴含 ai a_i 单位的高纯度矿石量。每次对第 i i 座矿脉开采时,可获得一定的收益,收益与当前矿脉的矿石量相同。开采后该矿脉的矿石量会减少 bi b_i 单位(当剩余量不足 bi b_i 时,减少至 0 0 ,此后无法再开采矿石获得收益)。

由于星际开采能力有限,最多只能进行 k k 次开采操作(每次操作可选择此星球中任意一座矿脉进行开采)。为了最大化收益,公司需要制定最优的开采策略,确保在不超过 k k 次操作的前提下,获取的总收益尽可能多。

已知共有 t t 个星球的矿脉数据需要处理,每个星球的矿脉情况独立,请你计算在每个星球中采矿所能获取的最大收益。

输入格式

第一行输入一个整数 t t 1t1000 1 \leq t \leq 1000 ),表示星球的数量。

对于每个星球,输入格式如下:

第一行输入两个整数 n n k k 1n105 1 \leq n \leq 10^5 1k109 1 \leq k \leq 10^9 ),分别表示矿脉数量和最大开采次数。

第二行输入 n n 个整数 a1,a2,,an a_1, a_2, \ldots, a_n 1ai109 1 \leq a_i \leq 10^9 ),表示每座矿脉的初始高纯度矿石量。

第三行输入 n n 个整数 b1,b2,,bn b_1, b_2, \ldots, b_n 1bi109 1 \leq b_i \leq 10^9 ),表示每座矿脉每次开采后的减少量。

保证每个星球中 n n 的总和不超过 2×105 2 \times 10^5

输出格式

对于每个星球,输出一行整数,表示在每个星球中采矿所能获取的最大收益。

5
3 4
5 6 7
2 3 4
5 9
32 52 68 64 14
18 14 53 24 8
5 1000
1 2 3 4 5
5 4 3 2 1
1 1000000
1000000
1
10 6
3 3 5 10 6 8 6 8 7 7
6 1 7 4 1 1 8 9 3 1
21
349
27
500000500000
47

提示

【样例解释】

对于此样例中的 55 个星球中的第一个星球,三个矿脉采集的次数可以为 (1,1,2) (1, 1, 2) (1,2,1) (1, 2, 1) (2,1,1) (2, 1, 1) ,获得的最大收益为 7+6+5+3=21 7 + 6 + 5 + 3 = 21

【数据范围】

对于所有数据,满足 1t1000 1 \leq t \leq 1000 1n105 1 \leq n \leq 10^5 1k109 1 \leq k \leq 10^9 1ai,bi109 1 \leq a_i, b_i \leq 10^9 ,且每个星球中 n n 的总和不超过 2×105 2 \times 10^5

::cute-table{tuack}

测试点 t t \leq n n \leq k k \leq ai,bi a_i, b_i \leq
121\sim 2 102 10^2 103 10^3 102 10^2 103 10^3
151\sim 5 200 200 104 10^4 50000 50000 106 10^6
1101\sim 10 103 10^3 105 10^5 109 10^9