Submission #1147682

#TimeUsernameProblemLanguageResultExecution timeMemory
1147682mendoza_gabrielCoin Collecting (JOI19_ho_t4)Java
0 / 100
46 ms10564 KiB
import java.io.*;

public class joi2019_ho_t4 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = parseInt(br.readLine().trim());
        int total = 2 * N;
        int[] X = new int[total];
        int[] Y = new int[total];
        for (int i = 0; i < total; i++) {
            String[] parts = mySplit(br.readLine());
            X[i] = parseInt(parts[0]);
            Y[i] = parseInt(parts[1]);
        }
        mergeSort(X, 0, total - 1);
        mergeSort(Y, 0, total - 1);
        int[] targetX = new int[total];
        int[] targetY = new int[total];
        for (int i = 0; i < total; i++) {
            targetX[i] = (i / 2) + 1;
        }
        for (int i = 0; i < total; i++) {
            targetY[i] = (i < N) ? 1 : 2;
        }
        long sum = 0;
        for (int i = 0; i < total; i++) {
            sum += abs(X[i] - targetX[i]);
            sum += abs(Y[i] - targetY[i]);
        }
        PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        out.println(sum);
        out.flush();
    }
    static void mergeSort(int[] a, int l, int r) {
        if(l >= r) return;
        int m = (l + r) / 2;
        mergeSort(a, l, m);
        mergeSort(a, m+1, r);
        int[] temp = new int[r - l + 1];
        int i = l, j = m+1, k = 0;
        while(i <= m && j <= r) {
            if(a[i] <= a[j]) { temp[k++] = a[i++]; }
            else { temp[k++] = a[j++]; }
        }
        while(i <= m) { temp[k++] = a[i++]; }
        while(j <= r) { temp[k++] = a[j++]; }
        for(i = l, k = 0; i <= r; i++, k++) { a[i] = temp[k]; }
    }
    static int abs(int a) { return a < 0 ? -a : a; }
    static String[] mySplit(String s) {
        int len = s.length(), cnt = 0;
        boolean inToken = false;
        for (int i = 0; i < len; i++) {
            if (!isSpace(s.charAt(i))) { if (!inToken) { cnt++; inToken = true; } }
            else { inToken = false; }
        }
        String[] tokens = new String[cnt];
        int idx = 0;
        StringBuilder sb = new StringBuilder();
        inToken = false;
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            if (!isSpace(c)) { sb.append(c); inToken = true; }
            else { if(inToken) { tokens[idx++] = sb.toString(); sb.setLength(0); inToken = false; } }
        }
        if(inToken) { tokens[idx++] = sb.toString(); }
        return tokens;
    }
    static boolean isSpace(char c) { return c==' ' || c=='\t' || c=='\n' || c=='\r'; }
    static int parseInt(String s) {
        int i = 0, n = s.length(), num = 0, sign = 1;
        if(n==0)return 0;
        char c = s.charAt(0);
        if(c=='-') { sign=-1; i++; }
        else if(c=='+') { i++; }
        for(; i<n; i++){ num = num*10 + (s.charAt(i)-'0'); }
        return sign * num;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...