#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
struct Device {
int a;
int b;
};
bool cmp(const Device& d1, const Device& d2) {
return d1.a < d2.a;
}
bool check(vector<Device>& devices, int p, double t) {
double totalEnergy = 0;
for (int i = 0; i < devices.size(); i++) {
if (devices[i].b >= t * devices[i].a) {
continue;
}
totalEnergy += t * devices[i].a - devices[i].b;
}
return totalEnergy <= p * t;
}
double getMaxTime(vector<Device>& devices, int p) {
sort(devices.begin(), devices.end(), cmp);
double left = 0;
double right = 1e9;
double ans = 0;
while (right - left > 1e-5) {
double mid = (left + right) / 2;
if (check(devices, p, mid)) {
ans = mid;
left = mid;
} else {
right = mid;
}
}
return ans;
}
int main() {
int n, p;
cin >> n >> p;
vector<Device> devices(n);
for (int i = 0; i < n; i++) {
cin >> devices[i].a >> devices[i].b;
}
double maxTime = getMaxTime(devices, p);
if (maxTime == 0) {
cout << -1 << endl;
} else {
cout << fixed << maxTime << endl;
}
return 0;
}
给个正解思路也行