結果
問題 |
No.3199 Key-Door Grid
|
ユーザー |
|
提出日時 | 2025-07-11 21:41:09 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,861 bytes |
コンパイル時間 | 272 ms |
コンパイル使用メモリ | 82,360 KB |
実行使用メモリ | 333,276 KB |
最終ジャッジ日時 | 2025-07-11 21:41:23 |
合計ジャッジ時間 | 4,890 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | TLE * 1 -- * 36 |
ソースコード
from collections import deque h, w, m = map(int, input().split()) mp = [input() for _ in range(h)] sx, sy = 0, 0 gx, gy = 0, 0 for i in range(h): for j in range(w): if mp[i][j] == 'S': sx, sy = i, j mp[i] = mp[i][:j] + '.' + mp[i][j+1:] elif mp[i][j] == 'G': gx, gy = i, j mp[i] = mp[i][:j] + '.' + mp[i][j+1:] que = deque([(sx, sy, 0, 0)]) # (x,y,key,dist) dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] visited = [[-1]*w for _ in range(h)] # (x,y) -> key visited[sx][sy] = 0 nums = set([str(i) for i in range(1, m + 1)]) alps = set([chr(i) for i in range(ord('a'), ord('a') + m)]) while que: x, y, key, dist = que.popleft() if (x, y) == (gx, gy): print(dist) exit() for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < h and 0 <= ny < w: if mp[nx][ny] == '#': continue if mp[nx][ny] == '.': if visited[nx][ny] != key: visited[nx][ny] = key que.append((nx, ny, key, dist + 1)) elif mp[nx][ny] in nums: new_key = ord(mp[nx][ny]) - ord('0') if visited[nx][ny] != new_key: visited[nx][ny] = new_key que.append((nx, ny, new_key, dist + 1)) elif mp[nx][ny] in alps: if key == 0: continue if key == ord(mp[nx][ny]) - ord('a') + 1: if visited[nx][ny] < key: visited[nx][ny] = key que.append((nx, ny, key, dist + 1)) elif mp[nx][ny] == 'G': if visited[nx][ny] < key: visited[nx][ny] = key que.append((nx, ny, key, dist + 1)) if visited[gx][gy] == -1: print(-1)