# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1148151 | ruben_ipenza | Coin Collecting (JOI19_ho_t4) | Java | 0 ms | 0 KiB |
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] coins = new int[2 * N][2];
for (int i = 0; i < 2 * N; i++) {
coins[i][0] = sc.nextInt(); // Coordenada x
coins[i][1] = sc.nextInt(); // Coordenada y
}
// Lista para las posiciones objetivo
List<int[]> targets = new ArrayList<>();
// Generar las posiciones objetivo
for (int i = 1; i <= N; i++) {
targets.add(new int[]{i, 1}); // Posición (x, y) = (i, 1)
targets.add(new int[]{i, 2}); // Posición (x, y) = (i, 2)
}
// Ordenar las monedas y las posiciones objetivo
Arrays.sort(coins, Comparator.comparingInt(a -> a[0]).thenComparingInt(a -> a[1]));
targets.sort(Comparator.comparingInt(a -> a[0]).thenComparingInt(a -> a[1]));
// Calcular el número mínimo de movimientos
long totalMoves = 0;
// Sumar las distancias Manhattan
for (int i = 0; i < 2 * N; i++) {
totalMoves += Math.abs(coins[i][0] - targets.get(i)[0]) + Math.abs(coins[i][1] - targets.get(i)[1]);
}
// Imprimir el resultado
System.out.println(totalMoves);
}
}