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 了