結果
問題 | No.157 2つの空洞 |
ユーザー | a_Higu |
提出日時 | 2015-03-02 11:33:28 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 100 ms / 2,000 ms |
コード長 | 3,839 bytes |
コンパイル時間 | 3,485 ms |
コンパイル使用メモリ | 79,888 KB |
実行使用メモリ | 50,940 KB |
最終ジャッジ日時 | 2024-06-24 01:08:22 |
合計ジャッジ時間 | 4,992 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 65 ms
50,104 KB |
testcase_01 | AC | 65 ms
50,144 KB |
testcase_02 | AC | 59 ms
50,176 KB |
testcase_03 | AC | 62 ms
50,172 KB |
testcase_04 | AC | 60 ms
50,196 KB |
testcase_05 | AC | 68 ms
49,864 KB |
testcase_06 | AC | 67 ms
49,924 KB |
testcase_07 | AC | 60 ms
50,016 KB |
testcase_08 | AC | 60 ms
50,212 KB |
testcase_09 | AC | 64 ms
50,292 KB |
testcase_10 | AC | 63 ms
50,172 KB |
testcase_11 | AC | 64 ms
50,156 KB |
testcase_12 | AC | 62 ms
50,112 KB |
testcase_13 | AC | 63 ms
49,932 KB |
testcase_14 | AC | 76 ms
50,212 KB |
testcase_15 | AC | 70 ms
50,284 KB |
testcase_16 | AC | 65 ms
50,300 KB |
testcase_17 | AC | 100 ms
50,940 KB |
testcase_18 | AC | 63 ms
50,196 KB |
testcase_19 | AC | 70 ms
50,068 KB |
ソースコード
import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.InputMismatchException; import java.util.List; public class Main { static StringBuilder out = new StringBuilder(); static String ls = System.lineSeparator(); static final String OK = "Possible"; static final String NG = "Impossible"; static FastReader fr = new FastReader(); // static final int INF = Integer.MAX_VALUE - 300000000; public static void main(String[] args) throws Exception, IOException { char wall = '#'; char hole = '.'; int w = fr.nextInt(); int h = fr.nextInt(); char[][] space = new char[h][w]; for (int i = 0; i < h; i++) { space[i] = fr.next().toCharArray(); } List<int[]> all = new ArrayList<>(); List<int[]> one = new ArrayList<>(); for (int i = 0; i < h; i++) for (int j = 0; j < w; j++) if (space[i][j] == hole) { int[] a = { i, j }; all.add(a); } one.add(all.get(0)); int i = 0; for (;;) { int preSize = one.size(); all.removeAll(one); for (; i < preSize; i++) { int[] a = one.get(i); for (int[] b : all) { int range = Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]); if (range == 1 && !one.contains(b)) { one.add(b); } } } if(preSize == one.size()) break; } all.removeAll(one); List<int[]> two = all; int min = Integer.MAX_VALUE; for(int[] a : one){ for(int[] b : two){ int range = Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]); if(range < min) min = range; } } System.out.println(min - 1); } static void printExit(String msg) { System.out.println(msg); System.exit(0); } } class FastReader { private InputStream in = System.in; private byte[] buf = new byte[1024]; private int charNum; private int charLen; private StringBuilder sb = new StringBuilder(); public int read() { if (charLen == -1) throw new InputMismatchException(); if (charNum >= charLen) { charNum = 0; try { charLen = in.read(buf); } catch (IOException e) { throw new InputMismatchException(); } if (charLen <= 0) return -1; } return buf[charNum++]; } public String next() { int c = read(); while (isWhitespace(c)) { c = read(); } sb.setLength(0); do { sb.appendCodePoint(c); c = read(); } while (!isWhitespace(c)); return sb.toString(); } public char[] nextCharArray() { return next().toCharArray(); } public int nextInt() { return (int) nextLong(); } public int[] nextIntArray(int n) { int[] array = new int[n]; for (int i = 0; i < n; i++) array[i] = nextInt(); return array; } public List<Integer> nextIntList(int n) { Integer[] array = new Integer[n]; for (int i = 0; i < n; i++) array[i] = nextInt(); return Arrays.asList(array); } public int[][] nextIntArray2D(int n, int m) { int[][] array = new int[n][m]; for (int i = 0; i < n; i++) array[i] = nextIntArray(m); return array; } public List<int[]> nextIntsList(int n, int m) { List<int[]> list = new ArrayList<>(n); for (int i = 0; i < n; i++) list.add(nextIntArray(m)); return list; } public long nextLong() { int c = read(); while (isWhitespace(c)) { c = read(); } int sgn = 1; if (c == '-') { sgn = -1; c = read(); } long res = 0; do { if (c < '0' || c > '9') throw new InputMismatchException(); res *= 10; res += c - '0'; c = read(); } while (!isWhitespace(c)); return res * sgn; } public double nextDouble() { return Double.parseDouble(next()); } public double[] nextDoubleArray(int n) { double[] array = new double[n]; for (int i = 0; i < n; i++) array[i] = nextDouble(); return array; } public boolean isWhitespace(int c) { return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; } }