果然是你存我我深深的脑海里,思路有了,调了那么久,进水了。。。
三分一边后,嵌套三分另一边。
#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\n",cal(l)); } return 0; }
原文:http://www.cnblogs.com/jie-dcai/p/4274069.html