結果
問題 | No.157 2つの空洞 |
ユーザー | yuki2006 |
提出日時 | 2015-02-26 19:32:40 |
言語 | PyPy2 (7.3.15) |
結果 |
AC
|
実行時間 | 130 ms / 2,000 ms |
コード長 | 1,469 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 76,732 KB |
実行使用メモリ | 79,136 KB |
最終ジャッジ日時 | 2024-06-23 23:49:51 |
合計ジャッジ時間 | 3,162 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 76 ms
75,320 KB |
testcase_01 | AC | 81 ms
75,560 KB |
testcase_02 | AC | 90 ms
76,320 KB |
testcase_03 | AC | 83 ms
76,348 KB |
testcase_04 | AC | 82 ms
77,844 KB |
testcase_05 | AC | 88 ms
77,736 KB |
testcase_06 | AC | 85 ms
77,736 KB |
testcase_07 | AC | 78 ms
76,460 KB |
testcase_08 | AC | 79 ms
76,988 KB |
testcase_09 | AC | 91 ms
77,712 KB |
testcase_10 | AC | 78 ms
76,940 KB |
testcase_11 | AC | 89 ms
77,940 KB |
testcase_12 | AC | 90 ms
77,632 KB |
testcase_13 | AC | 95 ms
78,088 KB |
testcase_14 | AC | 100 ms
77,976 KB |
testcase_15 | AC | 105 ms
78,328 KB |
testcase_16 | AC | 100 ms
78,096 KB |
testcase_17 | AC | 130 ms
79,136 KB |
testcase_18 | AC | 99 ms
78,124 KB |
testcase_19 | AC | 93 ms
78,108 KB |
ソースコード
import sys W, H = map(int, raw_input().split()) C = ["" for _ in xrange(H)] matrix = [[0 for i in xrange(W)] for i in xrange(H)] # close range def range_check(i, mn, mx): return mn <= i < mx def euclidean_distance(x, y, length): return abs(x) + abs(y) <= length def dfs(C, matrix, x, y, current): mn = H * W if C[y][x] == "#" or matrix[y][x] != 0: return 0 matrix[y][x] = current for i in xrange(-1, 2): for j in xrange(-1, 2): if i == 0 and j == 0: continue if not (range_check(x + i, 0, W) and range_check(y + j, 0, H)): continue if not euclidean_distance(i, j, 1): continue result = dfs(C, matrix, x + i, y + j, current) mn = min(result, mn) return mn for i in xrange(H): C[i] = raw_input() current = 1 for i in xrange(H): for j in xrange(W): if C[i][j] == "." and matrix[i][j] == 0: dfs(C, matrix, j, i, current) current += 1 mn = W * H for j1 in xrange(H): for i1 in xrange(W): for j2 in xrange(H): for i2 in xrange(W): if i1 == i2 and j1 == j2: continue if C[j1][i1] == "#" or C[j2][i2] == "#": continue if matrix[j1][i1] == matrix[j2][i2]: continue mn = min(mn, abs(i1 - i2) + abs(j1 - j2) - 1) print mn