結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
zombietan
|
| 提出日時 | 2016-05-27 22:43:43 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 32 ms / 2,000 ms |
| コード長 | 1,169 bytes |
| コンパイル時間 | 273 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 11,008 KB |
| 最終ジャッジ日時 | 2024-10-07 17:04:30 |
| 合計ジャッジ時間 | 1,607 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
W,H = map(int, input().split())
C = [input() for _ in range(H)]
reached = [[0 for _ in range(W)] for __ in range(H)]
def search(x, y):
if x <= 0 or H <= x-1 or y <= 0 or W <= y-1 or C[x][y] == '#':
return
if reached[x][y]:
return
reached[x][y] = True
search(x+1, y)
search(x-1, y)
search(x, y+1)
search(x, y-1)
for h in range(H):
for w in range(W):
if C[h][w] == '.':
x1, y1 = h, w
break
else:
continue
break
search(x1, y1)
empty1 = []
for j in range(H):
for k in range(W):
if reached[j][k] == True:
empty1.append((j, k))
reached = [[0 for _ in range(W)] for __ in range(H)]
for h in range(H):
for w in range(W):
t = (h, w)
if C[h][w] == '.' and t not in empty1:
x2, y2 = h, w
break
else:
continue
break
search(x2, y2)
empty2 = []
for n in range(H):
for m in range(W):
if reached[n][m] == True:
empty2.append((n, m))
ans = []
for p in empty1:
for q in empty2:
ans.append(abs(p[0] - q[0]) + abs(p[1] - q[1]))
print(min(ans)-1)
zombietan