其实这道题考的就是思维,目的要让所有数尽量平均,其实自己拿两个数模拟一下就能知道,一个数加1一个数减1是可以让所有都尽量平均,所以直接通过所有数之和判断能否使所有数都在[L,R]之间,要让操作最小,那就让操作不浪费,每一次操作都是使必须要加的数加1和要减的数减1,直接在必须要加的次数与必须要减的次数中取最大值
import java.util.*;
class Main {
小红最近拿到了一个数组,但是他发现这个数组很不规整,他想要把这个数组变得规整一点,他每次操作可以使得其中一个数组元素加$1$,另一个数组元素减$1$。小红希望最终数组的每个元素大小都在$[l,r]$范围内,他想知道自己能否完成目标,如果能的话,最少要多少次操作?
第一行输入一个正整数$t$,代表用例的组数。
对于每组用例:
第一行输入三个正整数$n,l,r$。
第二行输入$n$个正整数$a_i$,代表游游拿到的数组
$1 \leq t \leq 1000$
$2 \leq n \leq 200000$
$1 \leq l\leq r \leq 10^9$
$1 \leq a_i \leq 10^9$
保证所有的$n$的总和不超过$200000$
输出$t$行,每行一个整数,含义如下:
如果无法用有限次数的操作次数使得每个元素大小都在$[l,r]$范围内,请输出$-1$。否则输出一个整数,代表最少的操作次数
输入输出示例仅供调试,后台判题数据般不包含示例
输入
2
2 3 5
1 2
3 4 7
3 7 7
输出
-1
1