ARC 094 D - Worst Case [Python]
問題はこちら。
A <= B として一般性を失わない。解説はO(1)解法っぽいんだけどO(log A_max)解法しか思いつかなかった。あとsqrtを使うと誤差に悩まされがちなので二分探索でやった。
import sys
readline = sys.stdin.readline
def main():
Q = int(readline())
for _ in range(Q):
A, B = map(int, readline().split())
if A == B:
print(2 * A - 2)
continue
if A > B:
A, B = B, A
ans = A - 1
ok, ng = 1, B
while ng - ok > 1:
mid = (ok + ng) // 2
if mid ** 2 <= A * B - 1:
ok = mid
else:
ng = mid
if (A * B - 1) // ok > A:
ans += ok
ans += (A * B - 1) // (ok + 1) - A
else:
while ok > 0 and (A * B - 1) // ok <= A:
ok -= 1
ans += ok
print(ans)
if __name__ == "__main__":
main()
この記事が気に入ったらサポートをしてみませんか?