JAVA二分版,过了两个其他全部WA,不知道问题在哪,求解

P1102 A-B 数对

现在就一个WA了,我把int[] arr = new int[(int)2e5+5]改成int[] arr = new int[N]就好了,但还是有一个WA不知道哪里问题。
by stLOVEyxx @ 2023-04-16 06:30:05


我开始也是二分,这里是我后面的代码用的map ```java import java.io.*; import java.util.Arrays; import java.util.HashMap; import java.util.Scanner; public class Main { static final Scanner sc = new Scanner(System.in); static final StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static final PrintWriter print = new PrintWriter(System.out); public static int nextInt() throws IOException { st.nextToken(); return (int) st.nval; } public static void main(String[] args) throws IOException { int n = nextInt(); int c = nextInt(); HashMap<Integer,Integer> map = new HashMap<>(); for (int i = 0; i < n; i++) { int key = nextInt(); map.put(key,map.getOrDefault(key,0)+1); } long count = 0; for (Integer key : map.keySet()) { if (map.containsKey(key - c)) { count += (long) map.get(key) * map.get(key - c); } } System.out.println(count); } private static void demo1(int n, int c) throws IOException { int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = nextInt(); } Arrays.sort(a); int count = 0; for (int i = 0; i < n; i++) { int b = a[i] - c; int j = binarySearch(a, 0, i + 1, b); while (b == a[j++]) { count++; } } System.out.println(count); } public static int binarySearch(int[] a, int fromIndex, int toIndex, int key) { int low = fromIndex; int high = toIndex - 1; while (low < high) { int mid = (low + high) >>> 1; int midVal = a[mid]; if (midVal < key) low = mid + 1; else if (midVal >= key) high = mid; } return low; // key not found. } } ```
by ZAYu @ 2023-04-18 19:04:52


@[stLOVEyxx](/user/592424) 可以参考使用java中map提供的getOrDefault, ```java Scanner s = new Scanner(System.in); int N = s.nextInt(); int C = s.nextInt(); Map<Integer, Integer> map = new HashMap<>(); long count = 0; for (int i = 0; i < N; i++) { int num = s.nextInt(); count += map.getOrDefault(num - C, 0); count += map.getOrDefault(num + C, 0); map.put(num, map.getOrDefault(num, 0) + 1); } System.out.println(count); ```
by GoWithTheFlow @ 2023-07-02 10:06:25


|