Submission #1146820

#TimeUsernameProblemLanguageResultExecution timeMemory
1146820carolCoin Collecting (JOI19_ho_t4)Java
Compilation error
0 ms0 KiB
import java.util.*; public class Main { static class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Point)) return false; Point point = (Point) o; return x == point.x && y == point.y; } @Override public int hashCode() { return Objects.hash(x, y); } } // Directions for moving: right, left, up, down static final int[] dx = {1, -1, 0, 0}; static final int[] dy = {0, 0, 1, -1}; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); Point[] coins = new Point[2 * n]; // Read coin positions for (int i = 0; i < 2 * n; i++) { int x = scanner.nextInt(); int y = scanner.nextInt(); coins[i] = new Point(x, y); } // Create target positions Point[] targets = new Point[2 * n]; int idx = 0; for (int x = 1; x <= n; x++) { for (int y = 1; y <= 2; y++) { targets[idx++] = new Point(x, y); } } System.out.println(findMinimumMoves(coins, targets)); } static int findMinimumMoves(Point[] coins, Point[] targets) { int n = coins.length; int[][] distances = new int[n][n]; // Calculate distances from each coin to each target for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { distances[i][j] = calculateDistance(coins[i], targets[j]); } } // Use Hungarian algorithm to find minimum total distance return hungarianAlgorithm(distances); } static int calculateDistance(Point start, Point end) { if (start.equals(end)) return 0; Queue<Point> queue = new LinkedList<>(); Map<Point, Integer> distance = new HashMap<>(); queue.add(start); distance.put(start, 0); while (!queue.isEmpty()) { Point current = queue.poll(); int dist = distance.get(current); if (current.equals(end)) { return dist; } // Try all four directions for (int i = 0; i < 4; i++) { Point next = new Point(current.x + dx[i], current.y + dy[i]); if (!distance.containsKey(next)) { distance.put(next, dist + 1); queue.add(next); } } } return -1; // Should never happen given problem constraints } // Hungarian Algorithm implementation static int hungarianAlgorithm(int[][] costMatrix) { int n = costMatrix.length; int[] lx = new int[n]; int[] ly = new int[n]; int[] xy = new int[n]; int[] yx = new int[n]; boolean[] S = new boolean[n]; boolean[] T = new boolean[n]; int[] slack = new int[n]; int[] slackx = new int[n]; int[] prev = new int[n]; Arrays.fill(xy, -1); Arrays.fill(yx, -1); // Initialize labels for (int x = 0; x < n; x++) { lx[x] = costMatrix[x][0]; for (int y = 1; y < n; y++) { lx[x] = Math.max(lx[x], costMatrix[x][y]); } } int matches = 0; while (matches < n) { Arrays.fill(S, false); Arrays.fill(T, false); Arrays.fill(prev, -1); int x = 0; for (; x < n; x++) { if (xy[x] == -1) break; } for (int y = 0; y < n; y++) { slack[y] = lx[x] + ly[y] - costMatrix[x][y]; slackx[y] = x; } while (true) { if (augment(x, S, T, lx, ly, xy, yx, slack, slackx, prev, costMatrix)) { matches++; break; } int delta = Integer.MAX_VALUE; for (int y = 0; y < n; y++) { if (!T[y]) delta = Math.min(delta, slack[y]); } for (int i = 0; i < n; i++) { if (S[i]) lx[i] -= delta; if (T[i]) ly[i] += delta; } for (int y = 0; y < n; y++) { if (!T[y]) slack[y] -= delta; } } } int totalCost = 0; for (int x = 0; x < n; x++) { totalCost += costMatrix[x][xy[x]]; } return totalCost; } static boolean augment(int x, boolean[] S, boolean[] T, int[] lx, int[] ly, int[] xy, int[] yx, int[] slack, int[] slackx, int[] prev, int[][] costMatrix) { int n = costMatrix.length; S[x] = true; for (int y = 0; y < n; y++) { if (T[y]) continue; int currentSlack = lx[x] + ly[y] - costMatrix[x][y]; if (currentSlack == 0) { T[y] = true; if (yx[y] == -1 || augment(yx[y], S, T, lx, ly, xy, yx, slack, slackx, prev, costMatrix)) { xy[x] = y; yx[y] = x; return true; } } else if (currentSlack < slack[y]) { slack[y] = currentSlack; slackx[y] = x; } } return false; } }

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

=======