题目大意:
有n(1≤n≤100000)个设备,每个设备本身有bi(1≤ai,bi≤100000)的能量,每秒要消耗ai的能量。还有一个有每秒p(1≤p≤100000)能量的充电宝,问这些设备能一起使用多久。
思路:
二分答案,二分出出时间,具体看代码注释。
code:
#include<bits/stdc++.h>
using namespace std;
int n;
double p,a[100001],b[100001],sum;
int main(){
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
sum+=a[i];
}
if(sum<=p){//如果充电宝的能量比设备需要消耗的能量还多,那就可以一直用下去。
cout<<-1;
return 0;
}
double l=0,r=1e10;//r一定要开大一点,要不然会WA
while(r-l>1e-4){//注意精度误差
double mid=(l+r)/2;//使用时间
double num=0;
for(int i=1;i<=n;i++){
if(b[i]>=a[i]*mid){//如果本身有的能量大于去要消耗的能量
continue;
}
num+=(a[i]*mid-b[i]);//否则使用充电宝
}
if(num<=p*mid){//如果充电宝的能量够用
l=mid;//往大找
}else{//不够用
r=mid;//缩短时间
}
}
cout<<l;
return 0;
}