//对数组a[n]排序,每次取最大的两个数差值是否<=k; //如果true则计算乘积并加到result,并且下标移动2位;否则下标移动1位 //注意result使用long long, 则a[n]也使用long long #include <stdio.h> // 快速排序函数 void quick_sort(long long q[], int l, int r) {//注意使用long long!!! // 递归终止条件 if (l >= r) return; // 选择中间元素作为基准 int x = q[(l + r) / 2]; int i = l - 1, j = r + 1; // 分区操作 while (i < j) { do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) { // 交换元素 int temp = q[i]; q[i] = q[j]; q[j] = temp; } } // 递归排序左右两部分 quick_sort(q, l, j); quick_sort(q, j + 1, r); } //取绝对值 int absolute(int x) { return (x < 0) ? -x : x; } int main() { int n, k; long long result = 0; scanf("%d", &n); scanf("%d", &k); long long a[n];//注意使用long long!!! for(int i=0; i<n; i++){ scanf("%lld", &a[i]); } quick_sort(a, 0, n-1);//对数组a[n]排序 for(int j=n-1; j>0; j--){ if(absolute(a[j] - a[j-1]) <= k){ result += a[j] * a[j-1]; j--; } } printf("%lld\n", result); return 0; }