!错了两个点,测试点自己编了几个小的数据过了,but WA了两个,
noi之鄙人,未尝干完此题,求大佬教~
(先祝大家快乐)
#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
int a[MAXN],b[MAXN],n,k;
int check(double x){//寻找合适的值
double ans = 0;
for(int i=0 ; i<=n ; i++)
if(a[i]*x>b[i])
ans+=(a[i]*x-b[i]);
return ans<=(x*k);
}
int main(void){
scanf("%d%d",&n,&k);
int sum = 0;
for(int i=1 ; i<=n ; i++){scanf("%d%d",&a[i],&b[i]);sum += a[i];}
if(sum <= k) {cout<<-1<<endl;return 0;}//总消耗小于充电总量 贪心
double l = 0 , r= 1e10 ;
while(r - l > 1e-6){//二分找答案
double mid = (l + r)/2.0;
if(check(mid)) l = mid;//不够
else r = mid ;//够则 时间能不能更小?即左区间
}
printf("%.10lf",l);
return 0;
}