CF2141D Avoid Minimums
题目描述
给定一个整数数组 $a_1, a_2, a_3, \dots, a_n$。你的任务是使数组中所有元素都相等。为此,你可以进行至多 $k$ 次如下操作:
- 选择任意一个下标 $i$($1 \leq i \leq n$),将 $a_i$ 增加 $1$。
你可以选择数组中的任意元素,但如果选择的 $a_i$ 严格大于当前数组的最小值,你将获得一枚金币。请你计算,在所有可能的使数组元素相等的操作方案中,你最多能获得多少金币。
输入格式
第一行输入一个整数 $t$($1 \leq t \leq 1000$),表示测试用例的数量。接下来 $t$ 个测试用例,每个测试用例互相独立。
每个测试用例的第一行输入两个整数 $n$ 和 $k$($2 \leq n \leq 3 \times 10^5$,$1 \leq k \leq 10^{12}$),分别表示数组的大小和最多可以进行的操作次数。
每个测试用例的第二行输入 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \leq a_i \leq 10^9$),表示数组本身。
保证所有测试用例中 $n$ 的总和不超过 $3 \times 10^5$。
输出格式
对于每个测试用例,如果无法将数组中所有元素变为相等,则输出 $-1$。否则,输出在使所有元素相等的同时你最多能获得的金币数量。
说明/提示
在第一个测试用例中,至少需要 $17$ 次操作才能将所有元素变为相等(或者得到数组 $[10, 10, 10]$)。
在第二个测试用例中,你可以例如先将 $a_3 = 4$ 增加到 $10$,然后将 $a_1 = 6$ 增加到 $10$,接着将 $a_4 = 9$ 增加到 $10$,最后把 $a_2 = 2$ 增加到 $10$。你一共进行了 $19$ 次操作,获得了 $(10 - 4) + (10 - 6) + (10 - 9) = 11$ 枚金币,因为将 $a_2$ 从 $2$ 加到 $10$ 的操作不会获得任何金币。
在第三个测试用例中,你可以选择让数组不变,也可以把所有元素变成 $8$,无论哪种方法都不会获得金币。
由 ChatGPT 5 翻译