Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=3400

嵌套三分 Orz

我的代码
 1 #include <stdio.h>
2 #include <math.h>
3 const double eps=1e-6;
4 struct point
5 {
6 double x,y;
7 }a,b,c,d;
8 double v1,v2,v3;
9 double dist(point a,point b)
10 {
11 return sqrt((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y));
12 }
13 double ft(double s,double t)
14 {
15 point mab,mcd;
16 mab.x=a.x+(b.x-a.x)*s;
17 mab.y=a.y+(b.y-a.y)*s;
18 mcd.x=c.x+(d.x-c.x)*t;
19 mcd.y=c.y+(d.y-c.y)*t;
20 return dist(a,mab)/v1+dist(mab,mcd)/v2+dist(mcd,d)/v3;
21 }
22 double tfind2(double s)
23 {
24 double l=0,r=1;
25 double m1,m2,t1,t2;
26 while (r-l>eps)
27 {
28 m1=l+(r-l)/3;
29 m2=l+(r-l)/3*2;
30 t1=ft(s,m1);
31 t2=ft(s,m2);
32 if (t1<t2) r=m2;
33 else l=m1;
34 }
35 return t1;
36 }
37 double tfind()
38 {
39 double l=0,r=1;
40 double m1,m2,t1,t2;
41 while (r-l>eps)
42 {
43 m1=l+(r-l)/3;
44 m2=l+(r-l)/3*2;
45 t1=tfind2(m1);
46 t2=tfind2(m2);
47 if (t1<t2) r=m2;
48 else l=m1;
49 }
50 return t1;
51 }
52 int main()
53 {
54 int T;
55 scanf("%d",&T);
56 while (T--)
57 {
58 scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
59 scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
60 scanf("%lf%lf%lf",&v1,&v3,&v2);
61 printf("%.2lf\n",tfind());
62 }
63 }

 

posted on 2011-12-16 17:21  Qiuqiqiu  阅读(186)  评论(0编辑  收藏  举报