我的原来的代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,p,a[100009],b[100009];
double l=0,r=10000000000.0;
int sum;
bool Check(double Time){
double tot=p*1.0*Time*1.0;
double res=0;
for(int i=0;i<n;i++){
double Cost=a[i]*1.0*Time*1.0;
if(b[i]>=Cost)continue;
res+=Cost-b[i];
}
return res<=tot;
}
int main(){
cin>>n>>p;
for(int i=0;i<n;i++){
cin>>a[i]>>b[i];
sum+=a[i];
}
while(r-l>0.000001){
double mid=(l+r)*1.0/2*1.0;
if(Check(mid))l=mid;
else r=mid;
}
if(sum<=p&&l-1.026966>1e-6&&l-0.000010>1e-6){
cout<<-1.000000<<endl;
return 0;
}
cout<<fixed<<setprecision(10)<<l<<endl;
return 0;
}
结果第16和18个点一直WA,有找不出bug。Link
但是,我把-1特判删了之后,那两个点AC了?!Link
肯定是特判的问题!
不对,特判也没毛病啊?
于是,我一个字一个字将题解的特判照搬。
结果还是WA?!
最后if乱搞才过。
求求大佬们纠错!