結果
| 問題 | No.3504 Insert Maze |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-18 19:22:32 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,026 bytes |
| 記録 | |
| コンパイル時間 | 698 ms |
| コンパイル使用メモリ | 20,700 KB |
| 実行使用メモリ | 113,628 KB |
| 最終ジャッジ日時 | 2026-04-18 19:24:21 |
| 合計ジャッジ時間 | 17,248 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 TLE * 3 -- * 53 |
ソースコード
import sys
from collections import deque
readline = sys.stdin.readline
input_value = readline().split()
H = int(input_value[0])
W = int(input_value[1])
grid = [None] * H
for h in range(H):
grid[h] = readline().rstrip().replace('S', '.').replace('G', '.')
can_reach_goal = [[False] * W for _ in range(H)]
if grid[H-1][W-1] == '.':
can_reach_goal[H-1][W-1] = True
for y in range(H-1, -1, -1):
for x in range(W-1, -1, -1):
if grid[y][x] == '.':
if y + 1 < H and can_reach_goal[y+1][x]:
can_reach_goal[y][x] = True
if x + 1 < W and can_reach_goal[y][x+1]:
can_reach_goal[y][x] = True
row_has_reach = [[False] * W for _ in range(H)]
col_has_reach = [[False] * W for _ in range(H)]
for y in range(H):
has_reach = False
for x in range(W-1, -1, -1):
if can_reach_goal[y][x]:
has_reach = True
row_has_reach[y][x] = has_reach
for x in range(W):
has_reach = False
for y in range(H-1, -1, -1):
if can_reach_goal[y][x]:
has_reach = True
col_has_reach[y][x] = has_reach
dist = [[-1] * W for _ in range(H)]
queue = deque()
dist[0][0] = 0
queue.append((0,0))
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
Magic = H + W
ans = -1
check_point = False
while queue:
y, x = queue.popleft()
if y == H - 1 and x == W - 1:
ans = dist[y][x]
break
if dist[y][x] == y + x:
if y + 1 < H and row_has_reach[y + 1][x]:
check_point = True
if x + 1 < W and col_has_reach[y][x + 1]:
check_point = True
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if 0 <= ny < H and 0 <= nx < W:
if grid[ny][nx] == '.' and dist[ny][nx] == -1:
dist[ny][nx] = dist[y][x] + 1
queue.append((ny, nx))
if check_point:
if ans == -1 or ans > Magic - 1:
ans = Magic - 1
else:
if ans == -1 or ans > Magic:
ans = Magic
print(ans)