对于这道题,当时wa了很多次,当我在while循环里面取mid的时候,就wa,当把mid先放在外面取的时候就过了
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
int d[1005],s[1005];
double t;
bool c(double mid)
{
double sum=0.0;
for (int i=0;i<n;i++)
{
if(mid+s[i]<=0) return true;
else
sum+=1.0*d[i]/(s[i]+mid);
}
if(sum>=t) return true;
else return false;
}
int main()
{
while (cin>>n>>t)
{
for (int i=0;i<n;i++)
{
cin>>d[i]>>s[i];
}
double l=-1e9,r=1e9,mid=(l+r)/2.00;
while ((r-l)>1e-6)
{
if(c(mid))
{
l=mid;
mid=(l+r)/2.00;
}
else
{
r=mid;
mid=(l+r)/2.00;
}
}
printf("%0.6lf\n",mid);
}
}