公式
C - 川を行くボート / A Boat Going Down the River 解説
by
C - 川を行くボート / A Boat Going Down the River 解説
by
harurun4635
まずは、ボートの速度を求め、これを \(U_i\) としましょう。これで川は無視することができます。
川の流れが変わらない間は、速度は一定ですから
- 直前に速度が切り替わった時刻 \(T_i\)
- 直前に速度が切り替わった時の座標
- 今の速度 \(U_i\)
が分かれば数式で今の位置を求めることができます。
これらは、与えられた情報から求めることができます。具体的には二分探索をもちいることで、
- \(T_j \le X_i\) を満たす最大の \(j\)
を求めれば、これが直前に切り替わった時の時刻で、これから他の情報もわかります。
実装例
from bisect import bisect_right
n, v, q = map(int, input().split())
ts = [0]
xs = [0]
us = [0]
x = 0
for i in range(n):
t, w = map(int, input().split())
x += (t - ts[-1]) * us[-1]
if w > 0: w += v
elif w < 0: w -= v
ts.append(t)
xs.append(x)
us.append(w)
for i in range(q):
x = int(input())
j = bisect_right(ts, x) - 1
print(xs[j] + (x - ts[j]) * us[j])
投稿日時:
最終更新: