这种写法只得95
#include<bits/stdc++.h>
using namespace std;
int n,p,a[100009],b[100009];
long long sum=0;
int F(double x)
{
double tem=0;
for (int i=1;i<=n;i++)
{
if (a[i]*x>b[i])
{
tem+=(a[i]*x-b[i])/x;
}
if (tem>p)
{
break;
}
}
return tem<=p;
}
int main()
{
cin>>n>>p;
for (int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
sum+=a[i];
}
if (sum<=p)
{
cout<<"-1";
return 0;
}
double ans=0,l=0,r=0x7fffffff,mid=(r-l)/2+l;
while(l<=r)
{
if (F(mid))
{
l=mid+0.00001;
ans=mid;
}
else
{
r=mid-0.00001;
}
mid=(r-l)/2+l;
}
printf("%.10lf",ans);
return 0;
}
这里用0x7fffffff来初始化r,第19个测试点无法通过,但是改成2e10就过了 如下
#include<bits/stdc++.h>
using namespace std;
int n,p,a[100009],b[100009];
long long sum=0;
int F(double x)
{
double tem=0;
for (int i=1;i<=n;i++)
{
if (a[i]*x>b[i])
{
tem+=(a[i]*x-b[i])/x;
}
if (tem>p)
{
break;
}
}
return tem<=p;
}
int main()
{
cin>>n>>p;
for (int i=1;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
sum+=a[i];
}
if (sum<=p)
{
cout<<"-1";
return 0;
}
double ans=0,l=0,r=2e10,mid=(r-l)/2+l;
while(l<=r)
{
if (F(mid))
{
l=mid+0.00001;
ans=mid;
}
else
{
r=mid-0.00001;
}
mid=(r-l)/2+l;
}
printf("%.10lf",ans);
return 0;
}
这是为何