这一题有点意思,要想让得分最大,我们就要尽可能让符合条件的最大的两个数先相乘,所以就需要进行从大到小排序
排完序后就可以开始遍历数组了,如果符合条件的相乘完,我会让它们两个变为-1,也就是当作一个标记,表示这里被占用了
需要注意的是,这一题需要开long,因为a[i]的范围是10e5,两个相乘可能会超int范围
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int k=scanner.nextInt();
long a[]=new long[n];
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextLong();
}
long count=0;
Arrays.sort(a);
for (int i = 0; i < a.length/2; i++) {
long t=a[i];
a[i]=a[a.length-1-i];
a[a.length-1-i]=t;
}
for (int i = 0; i < a.length-1; i++) {
if(a[i]==-1)continue;
for (int j = i+1; j <= a.length-1; j++) {
if(a[j]==-1)continue;
if(Math.abs(a[i]-a[j])<=k) {
count+=a[i]*a[j];
a[i]=-1;
a[j]=-1;
break;
}
if(Math.abs(a[i]-a[j])>k) {
break;
}
}
}
System.out.println(count);
}
}



京公网安备 11010502036488号