#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxx = 1e5 + 10;
double n,p;
typedef struct facility{
double a,b,t;
}Fa;
Fa fa[maxx];
bool Find(double x){
//枚举 每个最长时间
double energe = x * p, nee = 0; //充电器 可以充的总能量
for(int i = 1;i <= n;i++){
if(fa[i].b < fa[i].a * x) //如果 这个时间内 设备需要充电
nee += fa[i].a * x - fa[i].b; //每个设备 在 x时间内 需要的能量
}
//如果 所需要的能量 小于 mid就继续往大 的找
return nee <= energe;
}
int main()
{
cin >> n >> p; //每秒可以 充能 p 个单位
long long sum = 0;
for(int i = 1;i <= n;i++){
cin >> fa[i].a >> fa[i].b; //每个设备 消耗的能量
//每个设备 刚开始的能量
sum += fa[i].a; //消耗能量的总速度
}
if(p >=sum){
cout << -1.0000000000;
return 0;
}
//求 第一个设备 能量降为 0 的时间最长是 多久
double l = 0,r = 1e10,ans = 0;
//mid 是 最长使用时间的最大值
while(r - l > 1e-6){
double mid = (l + r)/2;
if(Find(mid)) ans = l,l = mid;
else r = mid + 1e-6 ;
}
printf("%.10lf",r);
return 0;
}
如果 r = mid 就可以AC
double l = 0,r = 1e10,ans = 0;
//mid 是 最长使用时间的最大值
while(r - l > 1e-6){
double mid = (l + r)/2;
if(Find(mid)) ans = l,l = mid;
else r = mid ;
}
为什么啊……T^T
是因为 “ (r - l) > 1e-6 整数常量上存在无效后缀 ”吗?