两个代码是一样的逻辑,但一个tle了,另一个建立了check函数就ac了。
这个是ac的代码:
n, p = map(int, input().split())
list1 = []
sum1 = 0
def check(t):
sum2 = 0
for k in list1:
s = k[0] * t - 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)