P3743,95pts求调
#include<bits/stdc++.h>
using namespace std;
int n;
double p;
const int N=1e6+10;
double a[N],b[N];
double ans=-1;
double sum[N];
bool check(double x){
double s=p*x;
for(int i=1;i<=n;i++){
if(b[i]>=a[i]*x)continue;
s-=a[i]*x-b[i];
}
return s>=0;
}
int main(){
double sump=0;
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i];
}
for(int i=1;i<=n;i++){
sump+=a[i];
}
if(sump<=p){
cout<<-1;
return 0;
}
double l=1e-9,r=100000,mid;
while(r-l>=1e-9){
mid=(l+r)/2;
if(check(mid)){
ans=max(mid,ans);
l=mid+1e-9;
}
else r=mid-1e-9;
}
cout<<ans;
return 0;
}