aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

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)