【ABC198 C】「Compass Walking」を解く【Python3】

「AtCoder」解説一覧へ

2次元平面上の原点に、一歩Rで進む高橋君がいるとき、高橋君が点(X, Y)に到達するまでに必要な最小歩数を求める問題です。

提出
import math
r, x, y = map(int, input().split())

if math.sqrt(x**2+y**2)<r:
    ans = 2
else:
    ans = math.ceil(math.sqrt(x**2+y**2)/r)

print(ans)

問題文のように、点(x1, y1)と点(x2, y2)のユークリッド距離は√(x1-x2)2+(y1-y2)2 で求められます。

高橋君はちょうどRの距離しか進めないことを考えます。

原点と点(X, Y)のユークリッド距離がRより大きく、2Rより小さい場合、どの点であっても、最小2歩で到達できます。

(上図は分かりやすくするために、点(X, Y)がX軸上にありますが、角度や大きさを適宜変更して考えると、他の座標点でも当てはまることが分かります。)

同じように2Rより大きく、3Rより小さい場合は、3歩で到達できます。

ということで、ユークリッド距離√x2+y2を r(=R) で割った数の切り上げが答えになります。

ただし、例外があり、原点と点(X, Y)のユークリッド距離がRより小さい場合は、1歩ではなく、2歩歩かなくては到達できません。

この場合分けを行い、答えを出力します。

【ABC198】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です