#include <iostream>
using namespace std;
int a[100005], b[100005], asum = 0;
double t[100005]; // last time without adding electricity
int p, n;
int validate(double time) {
double sum = 0;
for (int i=0 ; i<n ; i++) if (t[i]<time) sum += (time-t[i])*a[i];
return sum<=(p*time);
}
double binSearch() {
double max = 1e10, min = 0, mid;
while (max-min>1e-5) {
mid = (max+min)/2;
if (validate(mid)) min = mid;
else max = mid;
}
return min;
}
int main(void) {
cin >> n >> p;
for (int i=0 ; i<n ; i++) {
cin >> a[i] >> b[i];
asum += a[i];
t[i] = 1.0*b[i]/a[i];
}
if (asum <= p) cout << -1 << endl;
else cout << binSearch() << endl;
return 0;
}
为啥我这个代码会在在应该是-1的时候进入binSearch那个分支呢??