#46166: 試了n種version都TLE


hansjiang1017@gmail.com (可以出題了!!!!!!!!!!!!!!!)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.104.111]
最後登入時間 :
2025-08-06 18:37:22

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")
#46194: Re: 試了n種version都TLE


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-09-21 22:24:46

我一開始用和你類似的寫法也是 TLE

後來嘗試導入 bisect+ IO 優化後就 AC 了