ebisuke競プロ初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。C言語も少しだけ勉強中

AtCoder-ABC198 C - Compass Walking【Python解答例】

f:id:ebisuke33:20210411233753p:plain
AtCoder Beginner Contest198のC - Compass WalkingについてPythonの解答例を記事にしていきます。
atcoder.jp


AtCoder Beginner Contest198 C - Compass Walking

C - Compass Walking

問題文

2 次元平面上の原点に高橋君がいます。
高橋君が 1 歩歩くと、いまいる点からのユークリッド距離がちょうど R であるような点に移動することができます(移動先の座標が整数である必要はありません)。これ以外の方法で移動することはできません。
高橋君が点 (X,Y) に到達するまでに必要な歩数の最小値を求めてください。
なお、点 (x1,y1) と点 (x2,y2) のユークリッド距離は √(x1−x2)2+(y1−y2)2 で与えられます。

制約

・1≤R≤10^5
・0≤X,Y≤10^5
・(X,Y)≠(0,0)
・入力は全て整数

解答例

r, x, y = map(int,input().split())

R_tmp = x**2 + y**2
R = pow(R_tmp, 0.5)

if R < r:
    ans = 2
else:
    ans = -(-R // r)

print(int(ans))

解説

1歩でrだけ進む高橋君が点(X,Y)に到着するのに必要な最小の歩数を答える問題です。

原点から点(X,Y)までの距離を求めます。
問題文にある数式の通りにRとして計算しました。

必要な歩数はこのRを歩幅rで割った余り切り上げた値が答えとなります。
ただし、Rが歩幅rより小さいときは1歩でたどり着くことはできず、遠くに寄り道する必要があるので2歩になります。

このようにして求めた必要な歩数を出力したらACでした。



ABC198の関連記事はこちら
ebisuke33.hatenablog.com