結果

問題 No.3599 Queen Moving Query
コンテスト
ユーザー detteiuu
提出日時 2026-07-24 22:27:13
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 1,077 ms / 5,000 ms
+ 204µs
コード長 1,507 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 237 ms
コンパイル使用メモリ 95,844 KB
実行使用メモリ 255,588 KB
最終ジャッジ日時 2026-07-24 22:27:33
合計ジャッジ時間 17,754 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from sys import stdin
input = stdin.readline
from collections import deque

INF = 1<<60

direction = []
for i in range(-1, 2):
    for j in range(-1, 2):
        if i == j == 0: continue
        direction.append((i, j))

H, W, sx, sy = map(int, input().split())
S = [input().rstrip("\n") for _ in range(H)]
Q = int(input())
query = [list(map(int, input().split())) for _ in range(Q)]

sx, sy = sx-1, sy-1

for dh, dw in direction:
    nh, nw = sx+dh, sy+dw
    if 0<=nh<H and 0<=nw<W and S[nh][nw] == ".":
        break
else:
    for _ in range(Q): print("No")
    exit()

visited = [[[[INF]*W for _ in range(H)] for _ in range(8)] for _ in range(2)]
que = deque()
for i in range(8):
    visited[0][i][sx][sy] = 0
    que.append((sx, sy, i, 0))
while que:
    h, w, d, oe = que.popleft()
    for idx, (dh, dw) in enumerate(direction):
        nh, nw = h+dh, w+dw
        if not (0<=nh<H and 0<=nw<W) or S[nh][nw] == "#": continue
        if idx == d and (h, w, oe) != (sx, sy, 0):
            if visited[oe][d][h][w] < visited[oe][idx][nh][nw]:
                visited[oe][idx][nh][nw] = visited[oe][d][h][w]
                que.appendleft((nh, nw, idx, oe))
        if visited[oe][d][h][w]+1 < visited[oe^1][idx][nh][nw]:
            visited[oe^1][idx][nh][nw] = visited[oe][d][h][w]+1
            que.append((nh, nw, idx, oe^1))

for gx, gy, t in query:
    gx, gy = gx-1, gy-1
    dist = INF
    for i in range(8):
        dist = min(dist, visited[t%2][i][gx][gy])
    print("Yes" if dist <= t else "No")
0