Submission #1148057

#TimeUsernameProblemLanguageResultExecution timeMemory
1148057pablo_floresCoin Collecting (JOI19_ho_t4)Java
0 / 100
75 ms16192 KiB
import java.util.*;

public class joi2019_ho_t4 {
    static final int MAXN = 100010;
    static int n;
    static int[][] mat = new int[MAXN][3];
    static long ans = 0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        readInput(scanner);

        calculateBalance();

        System.out.println(ans);

        scanner.close();
    }


    private static void readInput(Scanner scanner) {
        n = scanner.nextInt();

        for (int i = 1; i <= 2 * n; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();

            processPoint(x, y);
        }
    }

    private static void processPoint(int x, int y) {
        if (x < 1) {
            if (y >= 2) {
                mat[1][2]++;
                ans += Math.abs(x - 1) + Math.abs(y - 2);
            } else {
                mat[1][1]++;
                ans += Math.abs(x - 1) + Math.abs(y - 1);
            }
        } else if (x >= 1 && x <= n) {
            if (y >= 2) {
                mat[x][2]++;
                ans += Math.abs(y - 2);
            } else {
                mat[x][1]++;
                ans += Math.abs(y - 1);
            }
        } else if (x > n) {
            if (y >= 2) {
                mat[n][2]++;
                ans += Math.abs(x - n) + Math.abs(y - 2);
            } else {
                mat[n][1]++;
                ans += Math.abs(x - n) + Math.abs(y - 1);
            }
        }
    }

    private static void calculateBalance() {
        long num1 = 0, num2 = 0;

        for (int i = 1; i <= n; i++) {
            num1 += (mat[i][1] - 1);
            num2 += (mat[i][2] - 1);

            balanceColumns(num1, num2);

            ans += Math.abs(num1) + Math.abs(num2);
        }
    }

    private static void balanceColumns(long num1, long num2) {
        while (num1 > 0 && num2 < 0) {
            num1--;
            num2++;
            ans++;
        }
        while (num1 < 0 && num2 > 0) {
            num1++;
            num2--;
            ans++;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...