abc 026 D 高橋君ボール1号 (python)
f (t) = a * t + b * sin( c * t * pi ) として、
f (t) - 100 | <= 10 ** (-6) となる t を求める問題。 |
中間値の定理から、f (left) - 100 < 0、f (right) > 0 (left < right) のとき、left <= t <= right の範囲に条件を満たす t が存在するといえる。なので | f (t) - 100 | <= 10 ** (-6) を満たすまで、
f (t) - 100 < 0 なら、t = (t + right)/2,、f (t) - 100 > 0 なら、t = (t + left)/2 として探索範囲を狭めていけば答えに効率的にたどり着く。
a,b,c = map(int,input().split()) import math def is_ok(arg): return a*arg+b*math.sin(c*arg*math.pi) mid = -1 ok = 0 ng = 200 while abs(is_ok(mid)-100) > 10**(-7): mid = (ok + ng) *0.5 if is_ok(mid)-100 < 0: ok = mid else: ng = mid print(mid)