ABC198 C - Compass Walking에서 배운
5235 단어 AtCoder파이썬AtCoderBeginnerContest
diff 갈색 세례?
전혀 의미를 모른다.
실은 과거에도 도전하고 있어, 당시 해설을 보고 있을 것이지만, 전혀 머리에 들어가지 않았던 것을 기억하고 있다.
글쎄, 지금은 어떨까.
간신히 의미를 알았다.
이미지하면서 써보고 일단 다녔다.
CompassWalking.py
r,x,y= map(int,input().split())
#【重要】
# 二乗のまま使うことで、小数点の誤差を気にせず話を勧められる。
target = x**2 + y**2
ans = 1
#(ans**2)*(r**2) == target のとき、r を ans 歩で丁度ぴったりケースなら break
#(ans**2)*(r**2) > target のとき、r を ans 歩で丁度超えたばかりのケースなら break
# ==> 丁度超えたばかりのケースを回答として使える理由は入力例 2 , 3 を見てほしい。
# target を超えた 1 歩と、そのひとつ前の 1 歩を直線ではなく、組み合わせて迂回させることで
# 丁度 target につくことが出来る(問題文で小数点を許したのは、そういう意図か。。気付かなかった)。
while True:
if (ans**2)*(r**2) >= target:
break
else:
ans += 1
#解説にもある edge case に気を付けたい。最初の一歩が target とピッタリイコールなら問題ない。
#しかし、target を超える歩幅の場合はどうだろうか?その場合は ans = 1 ではなく、ans = 2 となる。
if ans == 1:
if r**2 > target:
ans = 2
print(ans)#87ms
해설을 들은 후에 자력으로 이미지를 만들면서 썼지만,
그래도 고민하면서 진행했다.
몹시 공부를 하게 된 1제였다. 감사.
그때부터 사파리 잊고 다시 도전.
아래로 다녔다.
abc198c.py
R,X,Y = map(int,input().split())
dis = (X**2 + Y**2)**0.5
if dis%R == 0:#数歩でピッタリな場合
print(int(dis//R))
elif dis < R:#一歩未満にgoalがある場合
print(2)
else:#上記以外
print(int(dis//R+1))#27ms
한 걸음 미만에 골이 있는 경우를 생각해낼 때까지 WA를 당겨 버렸다.
한발로 AC가 되고 싶은 곳이다.
Reference
이 문제에 관하여(ABC198 C - Compass Walking에서 배운), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AKpirion/items/85de771b6132535dde1a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)