結果
問題 |
No.3199 Key-Door Grid
|
ユーザー |
![]() |
提出日時 | 2025-07-11 21:45:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 612 ms / 3,000 ms |
コード長 | 1,325 bytes |
コンパイル時間 | 237 ms |
コンパイル使用メモリ | 81,664 KB |
実行使用メモリ | 120,404 KB |
最終ジャッジ日時 | 2025-07-11 21:45:35 |
合計ジャッジ時間 | 9,374 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
h, w, m = map(int, input().split()) S = [input() for _ in range(h)] for y in range(h): for x in range(w): if S[y][x] == "S": sy, sx = y, x elif S[y][x] == "G": gy, gx = y, x N = h * w dp = [-1] * N * 10 dp[(sy*w+sx)*10] = 0 from collections import deque dq = deque([(sy, sx, 0)]) dy = [0, 0, 1, -1] dx = [1, -1, 0, 0] while dq: y, x, k = dq.popleft() now = dp[(y*w+x)*10+k] for d in range(4): ny, nx = y + dy[d], x + dx[d] if 0 <= ny < h and 0 <= nx < w and S[ny][nx] != "#": if S[ny][nx] in "0123456789": a = int(S[ny][nx]) if dp[(ny*w+nx)*10+a] == -1: dp[(ny*w+nx)*10+a] = now + 1 dq.append((ny, nx, a)) elif S[ny][nx] in "abcdefghi": a = ord(S[ny][nx]) - ord("a") + 1 if a == k and dp[(ny*w+nx)*10+a] == -1: dp[(ny*w+nx)*10+a] = now + 1 dq.append((ny, nx, a)) else: if dp[(ny*w+nx)*10+k] == -1: dp[(ny*w+nx)*10+k] = now + 1 dq.append((ny, nx, k)) ans = 1 << 30 for i in range(10): if dp[(gy*w+gx)*10+i] != -1: ans = min(ans, dp[(gy*w+gx)*10+i]) if ans == 1 << 30: print(-1) else: print(ans)