結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
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