結果
| 問題 | No.3599 Queen Moving Query |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-08-01 03:27:19 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,168 ms / 5,000 ms |
| + 55µs | |
| コード長 | 2,239 bytes |
| 記録 | |
| コンパイル時間 | 225 ms |
| コンパイル使用メモリ | 96,112 KB |
| 実行使用メモリ | 261,152 KB |
| 最終ジャッジ日時 | 2026-08-01 03:27:39 |
| 合計ジャッジ時間 | 18,784 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 26 |
ソースコード
import sys
input = sys.stdin.readline
from collections import deque
H,W,sx,sy=list(map(int,input().split()))
S=[input().strip() for i in range(H)]
DP0=[[[1<<60]*8 for j in range(W)] for i in range(H)]
DP1=[[[1<<60]*8 for j in range(W)] for i in range(H)]
sx-=1
sy-=1
Q=deque()
for i in range(8):
DP0[sx][sy][i]=0
Q.append((sx,sy,0,i))
while Q:
#print(Q)
x,y,kai,com=Q.popleft()
if kai%2==0:
for z,w,nc in [(x+1,y,0),(x-1,y,1),(x,y+1,2),(x,y-1,3),(x+1,y+1,4),(x+1,y-1,5),(x-1,y+1,6),(x-1,y-1,7)]:
if 0<=z<H and 0<=w<W and S[z][w]!="#":
if com==nc:
if DP0[z][w][nc]>kai and kai>0:
DP0[z][w][nc]=kai
Q.appendleft((z,w,kai,nc))
if DP1[z][w][nc]>kai+1:
DP1[z][w][nc]=kai+1
Q.append((z,w,kai+1,nc))
else:
for z,w,nc in [(x+1,y,0),(x-1,y,1),(x,y+1,2),(x,y-1,3),(x+1,y+1,4),(x+1,y-1,5),(x-1,y+1,6),(x-1,y-1,7)]:
if 0<=z<H and 0<=w<W and S[z][w]!="#":
if com==nc:
if DP1[z][w][nc]>kai and kai>0:
DP1[z][w][nc]=kai
Q.appendleft((z,w,kai,nc))
if DP0[z][w][nc]>kai+1:
DP0[z][w][nc]=kai+1
Q.append((z,w,kai+1,nc))
c=0
for i in range(H):
for j in range(W):
for k in range(8):
if DP0[i][j][k]!=1<<60:
c=max(c,DP0[i][j][k])
if DP1[i][j][k]!=1<<60:
c=max(c,DP1[i][j][k])
Q=int(input())
for tests in range(Q):
gx,gy,T=list(map(int,input().split()))
gx-=1
gy-=1
if c==0:
print("No")
continue
if T%2==0:
xx=min(DP0[gx][gy][k] for k in range(8))
if xx==1<<60:
print("No")
else:
if xx<=T:
print("Yes")
else:
print("No")
else:
xx=min(DP1[gx][gy][k] for k in range(8))
if xx==1<<60:
print("No")
else:
if xx<=T:
print("Yes")
else:
print("No")
titia