很奇怪的问题,求大佬解答
查看原帖
很奇怪的问题,求大佬解答
1282144
hjiu45楼主2024/4/5 14:40

代码是同样的逻辑,建立check函数可以过,但是不用就tle了,这是为什么

这是ac的代码:

n, p = map(int, input().split())
list1 = []
sum1 = 0


def check(t):
    sum2 = 0
    for k in list1:
        s = k[0] * mid - k[1]
        if s > 0:
            sum2 += s
    return sum2 <= p * t


for i in range(n):
    a, b = map(int, input().split())
    sum1 += a
    list1.append([a, b])
if sum1 <= p:
    print(-1)
else:
    ans = 0
    i = 0
    j = 1e10
    while j - i > 1e-6:
        mid = (i + j) / 2
        if check(mid):
            ans = mid
            i = mid
        else:
            j = mid
    print(ans)

这是tle的:

n,p=map(int,input().split())
list1=[]
sum1=0
for i in range(n):
    a,b=map(int,input().split())
    sum1+=a
    list1.append([a,b])
if sum1<=p:
    print(-1)
else:
    ans=0
    i=0
    j=1e10
    while j-i>1e-6:
        mid=(i+j)/2
        sum2=0
        for k in list1:
            s=k[0]*mid-k[1]
            if s>0:
                sum2+=s
        if sum2<=p*mid:
            ans=mid
            i=mid
        else:
            j=mid
    print(ans)


2024/4/5 14:40
加载中...