CF1446A Knapsack
题目描述
你有一个容量为 $W$ 的背包。现在有 $n$ 个物品,第 $i$ 个物品的重量为 $w_i$。
你希望选择一些物品放入背包,使得它们的总重量 $C$ 至少为背包容量的一半,但(显然)不能超过背包容量。形式化地,$C$ 需要满足:$\lceil \frac{W}{2}\rceil \le C \le W$。
请输出你选择放入背包的物品的编号列表,或者判断无法满足条件。
如果存在多种满足条件的物品列表,你可以输出任意一种。注意,你不需要使背包内物品的总重量最大化。
输入格式
每组测试数据包含多个测试用例。第一行包含测试用例数量 $t$($1 \le t \le 10^4$)。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 $n$ 和 $W$($1 \le n \le 200\,000$,$1 \le W \le 10^{18}$)。
每个测试用例的第二行包含 $n$ 个整数 $w_1, w_2, \dots, w_n$($1 \le w_i \le 10^9$),表示每个物品的重量。
所有测试用例中 $n$ 的总和不超过 $200\,000$。
输出格式
对于每个测试用例,如果无解,输出一行 $-1$。
如果存在由 $m$ 个物品组成的解,第一行输出 $m$,第二行输出 $m$ 个整数 $j_1, j_2, \dots, j_m$($1 \le j_i \le n$,所有 $j_i$ 互不相同),表示你选择放入背包的物品编号。
如果存在多种满足条件的物品列表,你可以输出任意一种。注意,你不需要使背包内物品的总重量最大化。
说明/提示
在第一个测试用例中,你可以选择重量为 $3$ 的物品,正好装满背包。
在第二个测试用例中,所有物品的重量都大于背包容量,因此答案为 $-1$。
在第三个测试用例中,你正好装满背包的一半。
由 ChatGPT 4.1 翻译