p3747题目求助 删去while语句中的输出答案会出错 但是加上就会对掉 题目传送门
#include<bits/stdc++.h>
using namespace std;
int n,p ;//ct;
struct node{
double a,b;
}num[100086];
bool check(double mid)
{
double tim;
for(int i=1;i<=n;i++)
if((num[i].a*mid>num[i].b)&&(num[i].a*mid-num[i].b>=0)) tim+=(num[i].a*mid-num[i].b)/p;
//cout<<tim<<" std"<<endl;
return tim>=mid;
}
int main()
{
cin>>n>>p;
for(int i=1;i<=n;i++) cin>>num[i].a>>num[i].b;
if((n==1)&&(num[1].a<=p)&&(num[1].b>0))
{
cout<<"-1";
return 0;
}
double l=0;
double r=1e7;
while(r-l>=1e-10)
{
double mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid;
// cout<<l<<" "<<r<<endl;
}
//cout<<l;
// cout<<l<<" "<<r<<endl;
// cout << l << endl;
printf("%.10lf",l);
// cout << endl << ct;
return 0;
}