Submission #1146015

#TimeUsernameProblemLanguageResultExecution timeMemory
1146015mamanieverCoin Collecting (JOI19_ho_t4)Java
Compilation error
0 ms0 KiB
import java.util.*;

public class Main {

    // Direcciones para moverse (arriba, abajo, izquierda, derecha)
    private static final int[] DIR_X = {-1, 1, 0, 0};
    private static final int[] DIR_Y = {0, 0, -1, 1};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt(); // Número de posiciones objetivo
        List<int[]> coins = new ArrayList<>(); // Lista de posiciones de las monedas

        // Leer las posiciones de las monedas
        for (int i = 0; i < 2 * N; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            coins.add(new int[]{x, y});
        }

        // Generar las posiciones objetivo
        List<int[]> targets = new ArrayList<>();
        for (int i = 1; i <= N; i++) {
            targets.add(new int[]{i, 1}); // Fila 1
            targets.add(new int[]{i, 2}); // Fila 2
        }

        // Ordenar las monedas y los objetivos por coordenadas para emparejar eficientemente
        coins.sort(Comparator.comparingInt(a -> a[0]));
        targets.sort(Comparator.comparingInt(a -> a[0]));

        // Calcular la suma de las distancias mínimas usando BFS
        long totalOperations = 0;
        for (int i = 0; i < 2 * N; i++) {
            totalOperations += bfsDistance(coins.get(i), targets.get(i));
        }

        // Imprimir el resultado
        System.out.println(totalOperations);
    }

    /**
     * Calcula la distancia mínima entre dos celdas usando BFS.
     *
     * @param start Posición inicial de la moneda [x, y].
     * @param target Posición objetivo [x, y].
     * @return Distancia mínima entre la posición inicial y la posición objetivo.
     */
    private static int bfsDistance(int[] start, int[] target) {
        Queue<int[]> queue = new LinkedList<>();
        Set<String> visited = new HashSet<>();

        queue.add(new int[]{start[0], start[1], 0}); // {x, y, distancia}
        visited.add(start[0] + "," + start[1]);

        while (!queue.isEmpty()) {
            int[] current = queue.poll();
            int x = current[0], y = current[1], distance = current[2];

            // Si llegamos al objetivo, devolvemos la distancia
            if (x == target[0] && y == target[1]) {
                return distance;
            }

            // Explorar las celdas vecinas
            for (int i = 0; i < 4; i++) {
                int newX = x + DIR_X[i];
                int newY = y + DIR_Y[i];
                String key = newX + "," + newY;

                // Agregar la nueva celda a la cola si no ha sido visitada
                if (!visited.contains(key)) {
                    visited.add(key);
                    queue.add(new int[]{newX, newY, distance + 1});
                }
            }
        }

        return -1; // No debería llegar aquí
    }
}

Compilation message (stderr)

joi2019_ho_t4.java:3: error: class Main is public, should be declared in a file named Main.java
public class Main {
       ^
1 error

=======