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

古城微笑少年丶 2023-07-14 10:41 79阅读 0赞

题目:

在这里插入图片描述

题意:

已知长度为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代码

  1. import java.util.*;
  2. public class D {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. Integer n = sc.nextInt();
  6. Integer a[] = new Integer[n], b[] = new Integer[n], d[] = new Integer[n];
  7. for (int i = 0; i < n; i++)
  8. a[i] = sc.nextInt();
  9. for (int i = 0; i < n; i++)
  10. b[i] = sc.nextInt();
  11. for (int i = 0; i < n; i++)
  12. d[i] = a[i] - b[i];
  13. Arrays.sort(d);
  14. long ans = 0;
  15. int l = 0, r = n - 1;
  16. while (l < r)
  17. if (d[l] + d[r] > 0) {
  18. ans = ans + r - l;
  19. r--;
  20. } else
  21. l++;
  22. System.out.println(ans);
  23. }
  24. }

发表评论

表情:
评论列表 (有 0 条评论,79人围观)

还没有评论,来说两句吧...

相关阅读