错误代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double s,a,b,t1,t2;
void tim(double n){
t1=n/b+(s-n)/a;
t2=n/b+(n-n/b*a)/(a+b)+(s-(n/b*a)-(n-n/b*a)/(a+b)*a)/b;
return ;
}
double work(double l,double r){
double mid=(l+r)/2;
tim(mid);
if(fabs(t1-t2)<=1e-8)
return mid;
else if(t2>t1)
work(l,mid);
else
work(mid+1,r);
}
int main(){
scanf("%lf%lf%lf",&s,&a,&b);
double n=work(1,s);
printf("%.6lf\n",n/b+(s-n)/a);
return 0;
}
AC代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double s,a,b,t1,t2;
void tim(double n){
t1=n/b+(s-n)/a;
t2=n/b+(n-n/b*a)/(a+b)+(s-(n/b*a)-(n-n/b*a)/(a+b)*a)/b;
return ;
}
double work(double l,double r){
double mid=(l+r)/2;
tim(mid);
if(fabs(t1-t2)<=1e-8)
return mid;
else if(t2>t1)
work(l,mid-1);
else
work(mid+1,r);
}
int main(){
scanf("%lf%lf%lf",&s,&a,&b);
double n=work(1,s);
printf("%.6lf\n",t1);
return 0;
}