Codeforces #627 (Div. 3) D. Pair of Topics(双指针)

题目:

在这里插入图片描述

题意:

已知长度为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);
	}
}
发布了79 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43652327/article/details/104859089
今日推荐