From 39f13799e4e9f8a39839cb8d52c09e9814ba7463 Mon Sep 17 00:00:00 2001 From: Jeong Soo Lee Date: Tue, 28 Jun 2022 20:56:17 +0900 Subject: [PATCH] =?UTF-8?q?ADD=20BJ=5F7453=5F=ED=95=A9=EC=9D=B40=EC=9D=B8?= =?UTF-8?q?=EB=84=A4=EC=A0=95=EC=88=98.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\353\204\244\354\240\225\354\210\230.java" | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 "src/\354\235\264\354\240\225\354\210\230/week38/BJ_7453_\355\225\251\354\235\2640\354\235\270\353\204\244\354\240\225\354\210\230.java" diff --git "a/src/\354\235\264\354\240\225\354\210\230/week38/BJ_7453_\355\225\251\354\235\2640\354\235\270\353\204\244\354\240\225\354\210\230.java" "b/src/\354\235\264\354\240\225\354\210\230/week38/BJ_7453_\355\225\251\354\235\2640\354\235\270\353\204\244\354\240\225\354\210\230.java" new file mode 100644 index 0000000..4f1fde7 --- /dev/null +++ "b/src/\354\235\264\354\240\225\354\210\230/week38/BJ_7453_\355\225\251\354\235\2640\354\235\270\353\204\244\354\240\225\354\210\230.java" @@ -0,0 +1,91 @@ +package week38; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.StringTokenizer; + +/** + * ¹®Á¦: ÇÕÀÌ 0ÀÎ ³× Á¤¼ö ¸µÅ©: https://www.acmicpc.net/problem/7453 + * + * Ç®ÀÌ: + * + * + * ½Ã°£º¹Àâµµ: + * + * + * Ç®ÀÌ¿¡ °É¸° ½Ã°£: + * + * + */ +public class BJ_7453_ÇÕÀÌ0Àγ×Á¤¼ö { + + static long[] CD; + + public static void main(String[] args) throws NumberFormatException, IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + int n = Integer.parseInt(br.readLine()); + + long[] A = new long[n]; + long[] B = new long[n]; + long[] C = new long[n]; + long[] D = new long[n]; + long[] AB = new long[n * n]; + CD = new long[n * n]; + + for (int i = 0; i < n; ++i) { + st = new StringTokenizer(br.readLine()); + A[i] = Long.parseLong(st.nextToken()); + B[i] = Long.parseLong(st.nextToken()); + C[i] = Long.parseLong(st.nextToken()); + D[i] = Long.parseLong(st.nextToken()); + } + + int idx = 0; + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + AB[idx] = A[i] + B[j]; + CD[idx++] = C[i] + D[j]; + } + } + + Arrays.sort(AB); + Arrays.sort(CD); + + long cnt = 0; + for (int i = 0; i < AB.length; ++i) { + cnt += getUpperBound(0, CD.length, -AB[i]) - getLowerBound(0, CD.length, -AB[i]); + } + + System.out.println(cnt); + } + + private static int getUpperBound(int left, int right, long target) { + while (left < right) { + int mid = (left + right) / 2; + if (CD[mid] <= target) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + + private static int getLowerBound(int left, int right, long target) { + while (left < right) { + int mid = (left + right) / 2; + if (CD[mid] < target) { + left = mid + 1; + } else { + right = mid; + } + } + return right; + } + +} \ No newline at end of file