結果
問題 |
No.3199 Key-Door Grid
|
ユーザー |
👑 ![]() |
提出日時 | 2025-07-11 23:02:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,051 ms / 3,000 ms |
コード長 | 1,506 bytes |
コンパイル時間 | 370 ms |
コンパイル使用メモリ | 82,312 KB |
実行使用メモリ | 141,368 KB |
最終ジャッジ日時 | 2025-07-11 23:02:46 |
合計ジャッジ時間 | 13,232 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
def solve(): from collections import deque H, W, M = map(int, input().split()) dist = [[[-1] * (M + 1) for _ in range(W)] for _1 in range(H)] S = [None] * H for i in range(H): S[i] = input() for j in range(W): if S[i][j] == "S": start = (i, j) elif S[i][j] == "G": goal = (i, j) Q = deque([(start, 0)]) dist[start[0]][start[1]][0] = 0 while Q: p, key = Q.popleft() i, j = p d = dist[i][j][key] for di, dj in [(1, 0), (-1, 0), (0, 1), (0, -1)]: qi = i + di qj = j + dj if not(0 <= qi < H and 0 <= qj < W): continue if S[qi][qj] == "." or S[qi][qj] == "G" or S[qi][qj] == "S": if dist[qi][qj][key] == -1: Q.append(((qi, qj), key)) dist[qi][qj][key] = d + 1 if S[qi][qj] == "G": return dist[qi][qj][key] elif "1" <= S[qi][qj] <= "9": k = int(S[qi][qj]) if dist[qi][qj][k] == -1: Q.append(((qi, qj), k)) dist[qi][qj][k] = d + 1 elif "a" <= S[qi][qj] <= "i": if chr(key + ord("a") - 1) == S[qi][qj] and dist[qi][qj][key] == -1: Q.append(((qi, qj), key)) dist[qi][qj][key] = d + 1 return -1 #================================================== print(solve())