V1:
import sys
dp = [[0] * 101 for _ in range(64)]
for t in range(1, 64):
for k in range(1, 101):
dp[t][k] = dp[t - 1][k - 1] + dp[t - 1][k] + 1
for s in sys.stdin.readlines()[:-1]:
k, n = map(int, s.split())
l, r = 1, 63
ans = -1
while l <= r:
m = (l + r) // 2
if dp[m][k] >= n:
ans = m
r = m - 1
else:
l = m + 1
print(ans if ans != -1 else "More than 63 trials needed.")
v2:
import sys
dp = [[0] * 101 for _ in range(64)]
for t in range(1, 64):
for k in range(1, 101):
dp[t][k] = dp[t - 1][k - 1] + dp[t - 1][k] + 1
for s in sys.stdin.readlines()[:-1]:
k, n = map(int, s.split())
if dp[63][k] < n:
print( "More than 63 trials needed.")
else:
l, r = 1, 63
ans = -1
while l <= r:
m = (l + r) // 2
if dp[m][k] >= n:
ans = m
r = m - 1
else:
l = m + 1
print(ans)
v3:
import sys
dp = [[0]*64 for _ in range(101)]
for i in range(1, 101):
for j in range(1, 64):
dp[i][j] = dp[i-1][j-1] + dp[i][j-1] + 1
data = sys.stdin.read().split()
res = []
for i in range(0, len(data), 2):
k = int(data[i])
if k == 0:
break
n = int(data[i+1])
if dp[k][63] < n:
res.append("More than 63 trials needed.")
else:
l, r = 0, 63
while l < r:
m = (l + r) // 2
if dp[k][m] >= n:
r = m
else:
l = m + 1
res.append(str(l))
sys.stdout.write("\n".join(res)+"\n")
我一開始用和你類似的寫法也是 TLE
後來嘗試導入 bisect+ IO 優化後就 AC 了