CF2141D.Avoid Minimums

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个整数数组 a1,a2,a3,…,ana_1, a_2, a_3, \dots, a_n。你的任务是使数组中所有元素都相等。为此,你可以进行至多 kk 次如下操作:

  • 选择任意一个下标 ii(1≤i≤n1 \leq i \leq n),将 aia_i 增加 11。

你可以选择数组中的任意元素,但如果选择的 aia_i 严格大于当前数组的最小值,你将获得一枚金币。请你计算,在所有可能的使数组元素相等的操作方案中,你最多能获得多少金币。

输入格式

第一行输入一个整数 tt(1≤t≤10001 \leq t \leq 1000),表示测试用例的数量。接下来 tt 个测试用例,每个测试用例互相独立。

每个测试用例的第一行输入两个整数 nn 和 kk(2≤n≤3×1052 \leq n \leq 3 \times 10^5,1≤k≤10121 \leq k \leq 10^{12}),分别表示数组的大小和最多可以进行的操作次数。

每个测试用例的第二行输入 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(1≤ai≤1091 \leq a_i \leq 10^9),表示数组本身。

保证所有测试用例中 nn 的总和不超过 3×1053 \times 10^5。

输出格式

对于每个测试用例,如果无法将数组中所有元素变为相等,则输出 −1-1。否则,输出在使所有元素相等的同时你最多能获得的金币数量。

输入输出样例

  • 输入#1

    4
    3 16
    1 10 2
    4 20
    6 2 4 9
    5 9
    7 7 7 7 7
    2 1000000000000
    1000000000 1000000000

    输出#1

    -1
    11
    0
    499999999999

说明/提示

在第一个测试用例中,至少需要 1717 次操作才能将所有元素变为相等(或者得到数组 [10,10,10][10, 10, 10])。

在第二个测试用例中,你可以例如先将 a3=4a_3 = 4 增加到 1010,然后将 a1=6a_1 = 6 增加到 1010,接着将 a4=9a_4 = 9 增加到 1010,最后把 a2=2a_2 = 2 增加到 1010。你一共进行了 1919 次操作,获得了 (10−4)+(10−6)+(10−9)=11(10 - 4) + (10 - 6) + (10 - 9) = 11 枚金币,因为将 a2a_2 从 22 加到 1010 的操作不会获得任何金币。

在第三个测试用例中,你可以选择让数组不变,也可以把所有元素变成 88,无论哪种方法都不会获得金币。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页