CF2143B.Discounts

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Discounts

题目描述

你打算购买 nn 个商品,价格分别为 a1,a2,,ana_1, a_2, \ldots, a_n。你可以选择以下两种方式购买每件商品:

  • 逐个购买商品 ii,需支付 aia_i 个硬币;
  • 使用一张折扣券,将其作为团购的一部分购买。

你有 kk 张面值分别为 b1,b2,,bkb_1, b_2, \ldots, b_k 的折扣券。面值为 xx 的折扣券可以让你选中恰好 xx 个商品,并且只需支付其中价格最高的 x1x - 1 个商品,价格最低的那一个免费。你可以将其理解为团购中最便宜的一件商品免费。

每个商品最多只能被纳入一个折扣团购组,无论它是否是免费那件。同一张折扣券最多只能用一次。

请你计算,购买所有 nn 个商品的最小总花费是多少。

输入格式

输入包含多组测试数据。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

每个测试用例的第一行包含两个整数 nnkk1n,k21051 \le n, k \le 2 \cdot 10^5),分别表示商品数和折扣券数。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n1ai1091 \le a_i \le 10^9),表示每件商品的价格。

第三行包含 kk 个整数 b1,b2,,bkb_1, b_2, \ldots, b_k1bin1 \le b_i \le n),表示每张折扣券的面值。

保证所有测试用例中 nn 的总和不超过 21052 \cdot 10^5kk 的总和也不超过 21052 \cdot 10^5

输出格式

输出 tt 行,第 ii 行表示第 ii 个测试用例购买所有商品所需的最小总花费。

说明/提示

在第一个测试用例中,你可以把第一张折扣券用在第 2、3、4 号商品上,需支付价格最高的 2 件(3 和 7 个硬币),最便宜的那件免费,总共花费 3+7=103 + 7 = 10 个硬币。然后用第 2、第 3 张折扣券买第 1、5 件商品,使它们都免费。总费用为 1010

在第二个测试用例中,可以用那张面值为 5 的折扣券,团购第 2、3、4、5、6 件商品,其中最便宜的是第 2 件(2 个硬币),免费。其余需支付 1+6+3+3+4=171 + 6 + 3 + 3 + 4 = 17 个硬币。

在第三个测试用例中,只有一张折扣券,可以团购两件商品,免费最便宜的那一件,需支付 11 个硬币。

由 ChatGPT 5 翻译

样例

5
5 3
18 3 7 2 9
3 1 1
6 1
1 2 6 3 3 4
5
2 3
1 1
2 2 2
1 1
10
1
5 3
99 99 999 999 123
2 1 4
10
17
1
0
1197

在线编程 IDE

建议全屏模式获得最佳体验