HDU 3400 Line belt 嵌套三分搜索
2016-07-24 20:08
495 查看
Line belt
Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u
Submit
Status
Description
In a two-dimensional plane there are two line belts, there are two segments AB and CD, lxhgww’s speed on AB is P and on CD is Q, he can move with the speed R on other area on the plane.
How long must he take to travel from A to D?
Input
The first line is the case number T.
For each case, there are three lines.
The first line, four integers, the coordinates of A and B: Ax Ay Bx By.
The second line , four integers, the coordinates of C and D:Cx Cy Dx Dy.
The third line, three integers, P Q R.
0<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10
Output
The minimum time to travel from A to D, round to two decimals.
Sample Input
1
0 0 0 100
100 0 100 100
2 2 1
Sample Output
136.60
嵌套三分
Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u
Submit
Status
Description
In a two-dimensional plane there are two line belts, there are two segments AB and CD, lxhgww’s speed on AB is P and on CD is Q, he can move with the speed R on other area on the plane.
How long must he take to travel from A to D?
Input
The first line is the case number T.
For each case, there are three lines.
The first line, four integers, the coordinates of A and B: Ax Ay Bx By.
The second line , four integers, the coordinates of C and D:Cx Cy Dx Dy.
The third line, three integers, P Q R.
0<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10
Output
The minimum time to travel from A to D, round to two decimals.
Sample Input
1
0 0 0 100
100 0 100 100
2 2 1
Sample Output
136.60
嵌套三分
//嵌套三分 #include<iostream> #include<stdio.h> #include<cstring> #include<vector> #include<math.h> #include<sstream> #include<set> #include<map> #include<iomanip> #include<algorithm> using namespace std; const double MIN=0.00001; struct point { double x,y; }; double dis(point a,point b) { return sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2)); } point a,b,c,d; double p,q,r; double solve_ab(point m) { point left=a,right=b; point mid,midd; double ans1=2,ans2=1; while (fabs(ans1-ans2)>MIN) { mid.x=(left.x+right.x)/2; mid.y=(left.y+right.y)/2; midd.x=(mid.x+right.x)/2; midd.y=(mid.y+right.y)/2; ans1=dis(a,mid)/p+dis(mid,m)/r; ans2=dis(a,midd)/p+dis(midd,m)/r; if (ans1<ans2) right=midd; else left=mid; } return ans1; } double solve_abcd() { point left=c,right=d; point mid,midd; double ans1=2,ans2=1; while (fabs(ans1-ans2)>MIN) { mid.x=(left.x+right.x)/2; mid.y=(left.y+right.y)/2; midd.x=(mid.x+right.x)/2; midd.y=(mid.y+right.y)/2; ans1=dis(d,mid)/q+solve_ab(mid); ans2=dis(d,midd)/q+solve_ab(midd); if (ans1<ans2) right=midd; else left=mid; } return ans1; } int main() { cout<<fixed<<setprecision(2); int T; cin>>T; while (T--) { cin>>a.x>>a.y>>b.x>>b.y; cin>>c.x>>c.y>>d.x>>d.y; cin>>p>>q>>r; cout<<solve_abcd()<<endl; } }
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 2015年acm国内排名
- 计算字符串最后一个单词长度
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1002