2分探索
atcoderで2分探索に気づけないので、覚えるために、書き残しておく。
問題はABC063のD問題。
D - Widespread
解説はこれ。
https://atcoder.jp/img/arc075/editorial.pdf
大事なのは中のコメントのみ(##以下)。
ついでだけど、遅かったので、少し修正した。#以下は改善前。
N, A, B = map( int, input().split()) hmax = 0 H = [ int( input()) for _ in range(N)] hmax = max(H) L = 0 R = hmax//B + 1 add = A-B #以下よりも早い while R-L != 1:#L != R: now = (L+R)//2 need = 0 for i in range(N): r = H[i] - now*B if r > 0: need += (r-1)//add+1 if need <= now:##うまくいくとき R = now else:##うまくいかないとき L = now#+1 ##うまく行かないので+1している.これがないと無限ループが発生する。 print(R)