読者です 読者をやめる 読者になる 読者になる

水面下の夢

競プロやイラストに興味があります.メインブログがここ.ソシャゲの話はこっち(http://ameblo.jp/0n0-yumechi/).ブログアイコンはYaQ(@8_9_00)さんから.

ABC026 D - 高橋君ボール1号

回答

Submission #450906 - AtCoder Beginner Contest 026 | AtCoder

なんとなく解法は浮かんでいたんですけどねえ…
初めて二分法を活用できたような気がします,誤差が怖くてループ回しすぎている疑惑がありますが….
f(t)=A×t+B×sin(C×t×π) を計算するのですが,そのtを二分法で求めていくだけです.
ABCのD問題としてもかなり簡単な気がします… Beginnerっていうのに嘘はなかった!

import math

a, b, c = map(int, input().split())
ft, low, high = 100, 0, 500
calc = lambda m: a * m + b * math.sin(c * m * math.pi)
for i in range(100):
    mid = (low + high) / 2
    if calc(mid) < ft:
        low = mid
    else:
        high = mid
print(low)