結果
問題 |
No.3199 Key-Door Grid
|
ユーザー |
|
提出日時 | 2025-07-11 21:47:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 913 ms / 3,000 ms |
コード長 | 759 bytes |
コンパイル時間 | 493 ms |
コンパイル使用メモリ | 82,916 KB |
実行使用メモリ | 140,004 KB |
最終ジャッジ日時 | 2025-07-11 21:47:45 |
合計ジャッジ時間 | 12,862 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 37 |
ソースコード
from collections import* h,w,m=map(int,input().split()) s=[input()for _ in range(h)] for i in range(h): for j in range(w): if s[i][j]=='S': si,sj=i,j if s[i][j]=='G': gi,gj=i,j q=deque([(0,si*w+sj)]) INF=1<<60 t=[[INF]*(m+1)for _ in range(h*w)] t[si*w+sj][0]=0 while q: c,p=q.popleft() i,j=p//w,p%w for di,dj in(-1,0),(1,0),(0,1),(0,-1): ni,nj=i+di,j+dj if not(0<=ni<h and 0<=nj<w): continue np=ni*w+nj nc=c if s[ni][nj]=='#': continue if '1'<=s[ni][nj]<='9': nc=int(s[ni][nj]) if 'a'<=s[ni][nj]<='i': if nc!=ord(s[ni][nj])-ord('a')+1: continue if t[np][nc]<INF: continue t[np][nc]=t[p][c]+1 q+=(nc,np), ans=min(t[gi*w+gj]) print([-1,ans][ans<INF])