#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long int n,p,i,allcost;
double ans,expower;
struct mac{
long long int cost,power;
double time;
};
bool cmp(mac x,mac y){
if(x.time<=y.time) return 1;
else return 0;
}
mac a[N];
int main(){
scanf("%lld%lld",&n,&p);
for(i=1;i<=n;i++){
scanf("%lld%lld",&a[i].cost,&a[i].power);
a[i].time=a[i].power*1.0/(1.0*a[i].cost);
allcost+=a[i].cost;
}
if(allcost<=p){
printf("-1");
return 0;
}
allcost=0;
sort(a+1,a+1+n,cmp);
allcost=a[1].cost;
expower=a[1].time*p;
for(i=1;i<=n;i++){
if(i==n||(a[i+1].time-a[i].time)*p+expower<(a[i+1].time-a[i].time)*allcost){
if(allcost==p){
allcost+=a[i+1].cost;
continue;
}
ans=a[i].time+expower*1.0/((allcost-p)*1.0);
break;
}
else{
expower+=(a[i+1].time-a[i].time)*(p-allcost);
allcost+=a[i+1].cost;
}
}
printf("%lf",ans);
return 0;
}
本蒟蒻码风毒瘤,求不要喷……(/ω\)
虽然题目标签里有二分,但我好像没有用到二分。思路是按照不充电时能使用的时间排序,然后从最快耗尽的设备开始充电,直到充不上来就算一下时间。
re应该不是除数为0的问题,也应该不是死循环或者数组小了。蒟蒻流泪呜呜呜