题面
游游的元素修改
游游拿到了一个数组,她每次操作可以使得一个元素加1,另一个元素减1。
游游希望最终数组的每个元素大小都在[l,r]范围内,她想知道自己最少多少次操作可以达成目标?
输入
第一行输入一个正整数t,代表用例的组数。
对于每组用例:
第一行输入三个正整数n,l,r。
第二行输入n个正整数a_i,代表游游拿到的数组。
1<= t <= 1000
2<= n <= 200000
1<= l <= r <= 10^9
1<= a_i <= 10^9
保证所有的n的总和不超过200000。
输出
核心思想
代码
```java import java.util.*;class Main {
static final int MAXN = 1010;
static long[] res;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
res = new long[t];
Arrays.fill(res, -1);
for(int i = 0; i < t; i++){
int n = scanner.nextInt();
int l = scanner.nextInt();
int r = scanner.nextInt();
// 比l大的有多少 比r小的有多少
long lessThanR = 0, moreThanL = 0;
// 超出左边界的有多少 超出右边界的有多少
long needL = 0, needR = 0;
for(int j = 0; j < n; j++){
long x = scanner.nextLong();
if(x > l)
moreThanL += (x - l);
if(x < r)
lessThanR += (r - x);
if(x < l)
needL += l - x;
if(x > r)
needR += x - r;
}
if(needL >= needR && moreThanL >= needL){
res[i] = needL;
}
if(needL <= needR && lessThanR >= needR){
res[i] = needR;
}
}
for(long num: res){
System.out.println(num);
}
}
}
标签:24,scanner,int,res,long,游游,秋招,needL From: https://www.cnblogs.com/ganyq/p/18139112