BOJ 1072ゲーム


https://www.acmicpc.net/problem/1072
input :
  • X, Y ( 1 <= X <= 1,000,000,000)(0 <= Y <= X)
  • output :
    出力には少なくとも
  • ゲームが必要です
    (Zが変わらない場合は-1)
  • 初めて入力したY/Xは変わりますか?
    {Y+(追加されたゲーム数)/X+(追加されたゲーム数)}100
    ->Y/X}100とは違いますか?
    注意事項
    1.今探しているのは一番少ない板の数です.
    endに集中するのではなく
    始まりが答えだ.

  • 1敗であれば99->100には届かない.
    異常処理が必要です.

  • 分けるとミス型が出てきます.
    比較するために、整数型を選びましょう.
  • import sys
    
    X, Y = map(int, sys.stdin.readline().split())
    pivot = int(Y * 100 / X)
    
    start = 0
    end = 1000000000
    while start <= end:
        mid = (start + end) // 2
        compare = int((Y + mid) * 100 / (X + mid))
        if compare > pivot:
            end = mid - 1
        else:
            start = mid + 1
    if pivot >= 99:
        print(-1)
    else:
        print(start)

    そして直接彼に数学で計算させることもできます.
    勝率Z+1の付加板数がKの場合、Z+1=100(Y+K/X+K)となる.
    したがって、K=(Z+1)X−100*Y)/(99−Z)は、このような式を生成することができる.