果然是你存我我深深的脑海里,思路有了,调了那么久,进水了。。。
三分一边后,嵌套三分另一边。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double eps=1e-6;
struct Point{
double x,y;
};
Point a,b,c,d;
double p,q,rr;
double how(Point dont,Point dot){
double ans1=sqrt((dot.x-d.x)*(dot.x-d.x)+(dot.y-d.y)*(dot.y-d.y))/q ;
double ans2=sqrt((dont.x-dot.x)*(dont.x-dot.x)+(dont.y-dot.y)*(dont.y-dot.y))/rr;
return ans1+ans2;
}
double cal(Point dont){
Point l,r,m,mm;
l=c,r=d;
while(sqrt((l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y))>=eps){
m.x=(l.x+r.x)/2;
m.y=(l.y+r.y)/2;
mm.x=(m.x+r.x)/2;
mm.y=(m.y+r.y)/2;
if(how(dont,m)>how(dont,mm))
l=m;
else r=mm;
}
double lt=sqrt((dont.x-a.x)*(dont.x-a.x)+(dont.y-a.y)*(dont.y-a.y))/p;
return how(dont,l)+lt;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
scanf("%lf%lf%lf",&p,&q,&rr);
Point l,r,m,mm;
l=a; r=b;
while(sqrt((l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y))>=eps){
m.x=(l.x+r.x)/2;
m.y=(l.y+r.y)/2;
mm.x=(m.x+r.x)/2;
mm.y=(m.y+r.y)/2;
if(cal(m)>cal(mm))
l=m;
else r=mm;
}
printf("%.2lf
",cal(l));
}
return 0;
}