这一题有点意思,要想让得分最大,我们就要尽可能让符合条件的最大的两个数先相乘,所以就需要进行从大到小排序

排完序后就可以开始遍历数组了,如果符合条件的相乘完,我会让它们两个变为-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);

	}

}