tookunn’s diary

主に競技プログラミング関係

AtCoder Beginner Contest 198 C - Compass Walking

問題

atcoder.jp

考察

  • 移動先の座標は整数でなくてもよい。
  • ぴったり(X, Y)にたどり着かなければならない。

これがこの問題を解くときに大事なポイントだと思われる。

原点(0, 0)と(X, Y)間のユークリッド距離がRで割り切れる場合は
単純にユークリッド距離をRで割れば何回で(X, Y)にたどり着くか分かる。

逆にユークリッド距離がRで割り切れない場合については
(X, Y)とのユークリッド距離がR未満になるまで、(X, Y)に向かって移動する。(移動後の座標を(x, y)とする)
その後、(x, y)からユークリッド距離でR移動した座標と(X, Y)からユークリッド距離でR移動した座標
この2つが一致する座標に移動する。
そうすると、現在の座標からユークリッド距離でR移動すれば(X, Y)にぴったりだどり着ける。
つまり余分に1回移動回数を増やすことで、対応できる。

以上から
sqrt(X^2 + Y^2) / R でちょうど割り切れる場合はsqrt(X^2 + Y^2) / R
割り切れない場合はceil(sqrt(X^2 + Y^2) / R)になる。
ただ、sqrt(X^2 + Y^2) < Rの場合については2になる。