TLE掉了两个点,但是如果精度减小就会WA,精度增大更加TLE,似乎已经不是精度的问题了QAQ
细想总是觉得不对劲,但又不知道问题在哪里……
大佬们来拯救一下我这个自学蒟蒻吧QAQ
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e6+5;
const double eps=0.00004;
int n,p,a[MAX],b[MAX],ro=0;
double ri=100000.000000,ans2=0.000000,ans=0.000000;
long long ans3=0;
inline int read(){
char ch=getchar();
int i=0;
while(ch>'9'||ch<'0'){
ch=getchar();
}
while(ch<='9'&&ch>='0'){
i=(i<<1)+(i<<3)+(ch^48);
ch=getchar();
}
return i;
}
inline void check(double l,double r){
double mid=(l+r)/2;
ans=0;
for(register int i=1;i<=n;i++){
if(a[i]*mid<=b[i])
continue;
else{
ans+=(a[i]*mid-b[i])/p;
}
}
if(ans-mid>eps){
ro=0;
check(l,mid);
}
if(ans-mid<=eps){
if(ans-mid>-eps&&ans-mid<eps&&ans>ans2){
ans2=ans;
ro++;
}
if(ro>=1){
printf("%.6lf",ans2);
exit(0);
}
check(mid,r);
}
};
int main(){
n=read();
p=read();
for(register int i=1;i<=n;i++){
a[i]=read();
b[i]=read();
ans3+=a[i];
}
if(ans3<p){
printf("-1");
return 0;
}
ans=0.000000;
check(0.000000,ri);
return 0;
}