Kazun の競プロ記録

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

AtCoder Beginner Contest 270 B問題 Hammer

問題

atcoder.jp

提出解答

atcoder.jp

問題の概要

数直線上の原点に高橋君がいる. また, 座標  Y には壁があり, この壁を越えて移動はできない. しかし, 座標  Z にあるハンマーを取得した後ならば, この壁を破壊して通過できるようになる.

高橋君は座標  X に到達可能か? 可能ならば高橋君が座標  X に到達するための移動距離の最小値を求めよ.

制約

  •  -1000 \leq X,Y,Z \leq 1000
  •  X,Y,Z \neq 0
  •  X,Y,Z は相異なる.

解法

 X \lt 0 ならば  (X', Y', Z')=(-X, -Y, -Z) の場合に帰着することによって,  X \gt 0 であると仮定しても良い.

  •  0 \leq Y \leq X が成り立たない場合: 高橋君は原点から座標  X へ直接到達できる. よって, 答えは  X である.
  •  0 \leq Y \leq X が成り立つ場合: 高橋君は原点から座標  X へ直接到達できない.
    •  Y \leq Z の場合: 高橋君はハンマーを取得することもできない. よって, 座標  X へ到達できない.
    •  Y \gt Z の場合: 高橋君はハンマーを取得することによって座標  X へ到達できる. 答えは  \max(-2Z,0)+X である.