题目:
题意:
已知长度为n的a数组&b数组
问有多少对i,j使(ai+aj>bi+bj)成立。
分析:
式子可以转化为((ai-bi)+(aj-bj)>0),
使数组c[k]=a[k]-b[k];
对数组c进行排序
定义指针在c数组两端
右指针移动一次,总结果增加一次,
当左右指针相遇,跳出循环得到结果。
Integer一定要用Integer
不要用int,int会导致程序运行自动装箱操作,导致超时
AC代码
import java.util.*;
public class D {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer n = sc.nextInt();
Integer a[] = new Integer[n], b[] = new Integer[n], d[] = new Integer[n];
for (int i = 0; i < n; i++)
a[i] = sc.nextInt();
for (int i = 0; i < n; i++)
b[i] = sc.nextInt();
for (int i = 0; i < n; i++)
d[i] = a[i] - b[i];
Arrays.sort(d);
long ans = 0;
int l = 0, r = n - 1;
while (l < r)
if (d[l] + d[r] > 0) {
ans = ans + r - l;
r--;
} else
l++;
System.out.println(ans);
}
}