結果
| 問題 | No.3504 Insert Maze |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-17 23:38:24 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 4,927 bytes |
| 記録 | |
| コンパイル時間 | 719 ms |
| コンパイル使用メモリ | 20,696 KB |
| 実行使用メモリ | 214,008 KB |
| 最終ジャッジ日時 | 2026-04-17 23:39:40 |
| 合計ジャッジ時間 | 19,165 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 TLE * 1 -- * 57 |
ソースコード
import sys
from collections import deque
def solve():
input_data = sys.stdin.read().split()
if not input_data:
return
H = int(input_data[0])
W = int(input_data[1])
grid = input_data[2:]
HW = H * W
HW2 = 2 * HW
HW3 = 3 * HW
dist = [-1] * (4 * HW)
start_state = 0
end_state = HW - 1
q = deque([start_state])
dist[start_state] = 0
is_empty = [False] * HW
for r in range(H):
row_str = grid[r]
base = r * W
for c in range(W):
if row_str[c] != '#':
is_empty[base + c] = True
q_popleft = q.popleft
q_append = q.append
while q:
curr = q_popleft()
if curr == end_state:
print(dist[curr])
return
d = dist[curr]
nd = d + 1
typ = curr // HW
rem = curr % HW
r = rem // W
c = rem % W
if typ == 0:
if r > 0:
nxt = rem - W
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r < H - 1:
nxt = rem + W
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c > 0:
nxt = rem - 1
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c < W - 1:
nxt = rem + 1
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r < H - 1:
nxt = HW + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r > 0:
nxt = HW + rem - W
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c < W - 1:
nxt = HW2 + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c > 0:
nxt = HW2 + rem - 1
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
elif typ == 1:
if is_empty[rem] and dist[rem] == -1:
dist[rem] = nd
q_append(rem)
nxt = rem + W
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c > 0:
nxt = curr - 1
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c < W - 1:
nxt = curr + 1
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c < W - 1:
nxt = HW3 + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if c > 0:
nxt = HW3 + rem - 1
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
elif typ == 2:
if is_empty[rem] and dist[rem] == -1:
dist[rem] = nd
q_append(rem)
nxt = rem + 1
if is_empty[nxt] and dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r > 0:
nxt = curr - W
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r < H - 1:
nxt = curr + W
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r < H - 1:
nxt = HW3 + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
if r > 0:
nxt = HW3 + rem - W
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
else:
nxt = HW + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
nxt = HW + rem + 1
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
nxt = HW2 + rem
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
nxt = HW2 + rem + W
if dist[nxt] == -1:
dist[nxt] = nd
q_append(nxt)
print(-1)
if __name__ == '__main__':
solve()