Kazun の競プロ記録

競技プログラミングに関する様々な話題を執筆します.

AtCoder Beginner Contest 249 A問題 Jogging

問題

atcoder.jp

提出解答

解法1 atcoder.jp

解法2 atcoder.jp

問題の概要

高橋君と青木君は次のようにジョギングする.

  • 高橋君: 「 A 秒間秒速  B メートルで歩き,  C 秒間休む」を繰り返す.
  • 青木君: 「 D 秒間秒速  E メートルで歩き,  F 秒間休む」を繰り返す.

2人が同時にジョギングを始め,  X 秒後には高橋君と青木君はどちらがより長い距離を進んでいたか (または同じか)?

制約

  •  1 \leq A,B,C,D,E.F,X \leq 100

解法 1 (愚直シミュレーション)

高橋君と青木君の行動について, 整数  t に対して,  t 秒後から  (t+1) 秒後の行動はかわらない *1. よって, 各  t において,  t 秒後から  (t+1) 秒後の行動をそれぞれ求め, 実際にシミュレーションすればよい.

具体的には, 整数  x y で割った余りを  x \bmod{y} と書くことにすると, 整数  t に対して,

  •  t \bmod {(A+C)} \lt A ならば, 高橋君は  t 秒後から  (t+1) 秒後は歩く.
  •  t \bmod {(A+C)} \geq A ならば, 高橋君は  t 秒後から  (t+1) 秒後は休む.

青木君についても同様である.

解放 2 (計算)

高橋君が歩く距離は, 高橋君が歩く時間に注目して,

 \left(A \times \left \lfloor \dfrac{X}{A+C} \right \rfloor+ \min (X \bmod{(A+C)}, A ) \right) \times B

である.

*1:正確には, 整数時刻での行動を考えると言えないが, 距離には影響しない