ログインしてください。
G - Bonfire 解説
by
harurun4635
時刻 \( a \) に \( (0, 0) \) がある煙が時刻 \( b \) に \( (R, C) \) に到達するというのは、 \( S[a:b) \) を操作した時にちょうどその操作で \( (R, C) \) 移動するということと同じことです。
もう少し言い換えると \( S[0:a) \) で移動した座標 \( (x_a, y_a) \) と \( S[0:b) \) で移動した座標 \( (x_b, y_b) \) の差 \((x_b - x_a, y_b - y_a)\) が \( (R, C) \) と一致するということでもあります。
\( (x_b - x_a, y_b - y_a) = (R, C)\) というのは \((x_b - R, y_b - C) = (x_a, y_a) \) とおなじことですから、「いま移動している距離」から \( (R, C) \) を引いた位置をこれまでに通過したかどうかを判定すればよいです。
実装例 (PyPy):
dir = {'N':(-1,0), 'W':(0,-1), 'S':(1,0), 'E':(0,1)}
N, R, C = map(int, input().split())
S = input()
x, y = 0, 0
st = set()
st.add((0, 0))
ans = [0] * N
for i in range(N):
dx, dy = dir[S[i]]
x += dx; y += dy
if (x-R, y-C) in st:
ans[i] = 1
st.add((x, y))
print(*ans, sep = "")
投稿日時:
最終更新: