这里一个充能点问能维护n个费能点多久,由于这里充能点的转变不需要浪费任何时间,所以,能维护一堆机器工作t时的充要条件是 :能提供的电量大于等于消耗电量,这里把电量看作对象,一个机器用掉多冲的电量的时间完全可以用来充满另一个,总的电量是一定的,只要将电量在极小的时间内平分就一定能持续不用管b【i】
#include<iostream>
#include<cstring>
#include<vector>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int nn=1e5+50;
const double eps=1e-6;
inline ll read() {
ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*f;
}
inline void write(ll x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int main ()
{
ll n,p;
ll a[100005],b[100005];
n=read(),p=read();
ll sum=0;
for(int i=1;i<=n;++i)
{
a[i]=read(),b[i]=read();
sum+=a[i];
}
if(sum<=p)
{
cout<<"-1";
}
else {
double l=0;
double r=10000000000;
double mid;
double ans=0;
while(l+eps<=r)
{
mid=(l+r)/2.0;
ans=0;
for(int i=1;i<=n;++i)
{
if((double)b[i]>=(double)a[i]*mid)
continue;
else {
ans+=mid*(double)a[i]-(double)b[i];
}
}
if(ans<=(double)p*mid)
{
l=mid;
}
else r=mid;
}
cout<<l;
}
return 0;
}