`
lgh1992314
  • 浏览: 315596 次
文章分类
社区版块
存档分类
最新评论

hdoj_3400Line belt

 
阅读更多

Line belt

Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1885Accepted Submission(s): 713


Problem 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
三分嵌套三分。
AB上确定一点,然后三分枚举CD上的点。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const double EPS = 1e-10;

int p,q,r;

struct point {
	double x;
	double y;
};

double dis(point a,point b)
{
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

double findy(point c,point d,point y)
{
	point mid,midmid,left,right;
	double mid_t,midmid_t;
	left = c;
	right = d;
	do
	{
		mid.x = (left.x + right.x) / 2;
		mid.y = (left.y + right.y) / 2;
		midmid.x = (right.x + mid.x) / 2;
		midmid.y = (right.y + mid.y) / 2;
		mid_t = dis(d,mid) / q + dis(mid,y) / r;
		midmid_t = dis(d,midmid) / q+dis(midmid,y) / r;
		if(mid_t > midmid_t)
			left = mid;
		else right = midmid;
	}while(fabs(mid_t - midmid_t)>EPS);
	return mid_t;
}
double find(point a,point b,point c,point d)
{
	point mid,midmid,left,right;
	double mid_t,midmid_t;
	left = a;
	right = b;
	do
	{
		mid.x = (left.x + right.x) / 2;
		mid.y = (left.y + right.y) / 2;
		midmid.x = (right.x + mid.x) / 2;
		midmid.y = (right.y + mid.y) / 2;
		mid_t = dis(a,mid) / p + findy(c,d,mid);
		midmid_t = dis(a,midmid) / p + findy(c,d,midmid);
		if(mid_t > midmid_t)left = mid;
		else right = midmid;
	}while(fabs(mid_t - midmid_t)>EPS);
	return mid_t;
}

int main()
{
	freopen("in.txt","r",stdin);
	int t;
	point a,b,c,d;
	cin>>t;
	while(t--)
	{
		cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;
		cin>>p>>q>>r;
		printf("%.2lf\n",find(a,b,c,d));
	}
	
	return 0;
}


分享到:
评论

相关推荐

    hdoj.rar_Dividing HDOJ_OJ 1082_hdoj 10_杭电oj_杭电oj1000

    【标题】"hdoj.rar_Dividing HDOJ_OJ 1082_hdoj 10_杭电oj_杭电oj1000" 涉及的知识点主要围绕着“杭电在线判题系统(HDOJ)”以及其中的题目1082和10系列题目。HDOJ是杭州电子科技大学主办的一个在线编程竞赛平台,...

    hdoj.rar_HDOJ _OJ_oj_如何卡oj

    【标题】"hdoj.rar_HDOJ _OJ_oj_如何卡oj" 提供的信息主要涉及到两个关键概念:HDOJ(杭州电子科技大学在线评测系统)和OJ(Online Judge),以及“如何卡oj”的技巧。首先,让我们详细了解这两个核心概念。 OJ(On...

    HDOJ.zip_HDOJ _Mine!_algorithm_stepped8pp

    _algorithm_stepped8pp”指的是一个压缩文件,其中包含的主要是与“HDOJ”(Happy Dog Online Judge)平台相关的代码,特别是作者自己的解决算法。"Mine!"可能表示这些代码是个人的作品,而"stepped8pp"可能是某种...

    OJ.tar.gz_HDOJ _OJ源码_oj

    通过分析这些源代码,我们可以深入理解在线判题系统(Online Judge,简称OJ)的工作原理,以及它如何处理、评测和管理编程竞赛题目。 在线判题系统是编程竞赛和教育领域的重要工具,它们通常由以下几个核心组成部分...

    hdu4405_HDOJ_ACM_

    【标题】"hdu4405_HDOJ_ACM_" 指的是在杭州电子科技大学(HDU)的在线判题系统(Online Judge,简称OJ)上的一道编程竞赛题目,它属于HDOJ ACM系列。这个系列通常与国际大学生程序设计竞赛(ACM/ICPC)相关,这类...

    HDOJ_1480 钥匙计数之二 解题报告.mht

    HDOJ_1480 钥匙计数之二 解题报告.mhtHDOJ_1480 钥匙计数之二 解题报告.mht

    HDOJ_1010 Tempter of the Bone

    【HDOJ_1010 诱惑者的骨头】是一道经典的图论问题,主要考察的是在特定时间约束下寻找图中的路径。题目要求我们判断在一个给定的环境中是否存在一条从入口到出口的可行路径。这涉及到图的遍历算法,如深度优先搜索...

    HDOJ_my_answer

    【标题】"HDOJ_my_answer" 指的可能是你在参与某次编程挑战或学习过程中,为解决High-Dimensional Online Judge(HDOJ)上的问题而编写的个人解答集。这个压缩包很可能是你存储自己对HDOJ题目答案的一个项目文件,...

    HDOJ.rar_HD_HDOJ

    【标题】"HDOJ.rar_HD_HDOJ" 是一个与HDU(杭州电子科技大学)在线判题系统HDOJ相关的压缩包文件,其中包含了大量编程题目的源代码。 【描述】提到,这个压缩包包含了几百道HDOJ题目的源代码,这意味着它是一个宝贵...

    HDU.rar_hdoj 2000 2999 chm_hdoj 2000-2099_hdu_hdu acm 20_杭电ACM

    “HDOJ”通常指的是杭电的在线判题系统,是众多ACMer进行算法训练和比赛的重要平台。在这个平台上,题目编号通常从1000开始,按照顺序递增。本压缩包聚焦于2000到2099的题目,这些题目涵盖了基础到进阶的各种算法...

    杭电acm 实习课件

    首先,课件中提到了一个非常基础的题目——HDOJ_1089,这是一个简单的加法问题。初学者常见的错误写法是只考虑了两个数的输入和输出,忽略了可能存在的多组数据。正确的处理方式是使用循环结构,例如C语言中的`while...

    HDOJ题目分类 HDOJ题目分类

    HDOJ,全称为Happy DingO Online Judge,是一个在线编程竞赛平台,它为参赛者提供了大量编程题目进行练习和比赛,旨在提升编程技能和算法理解。HDOJ的题目分类是帮助用户更好地组织和筛选题目,以便针对不同主题进行...

    How_to_Use_HDOJ

    搞acm的没有谁不知道杭电题库,但是杭电上的OJ到底该怎么用,对于某些初学者确实一个难题,所以How_to_Use_HDOJ.rar应运而生

    (lecture_02)简单数学题

    **位运算优化**:如HDOJ_1061题,对于求解大数的末尾几位,可以利用位运算的性质进行优化,避免直接计算大数乘法导致的时间复杂度过高。\n\n4. **指数模运算**:在HDOJ_2035题中,要求求解A的B次方最后三位数。可以...

    acm课件2 简单数学题

    HDOJ_1108题给出了这样的例子,要求计算两个数的LCM。通常,我们可以通过先计算最大公约数(GCD)再利用公式`LCM = 数1 * 数2 / GCD`来求解。课件中提到了欧几里得算法来计算GCD,它基于两个数相除的余数不断迭代,...

    (lecture_02)简单数学题090223.ppt

    HDOJ_1108题目的目标是计算两个正整数的最小公倍数(LCM)。求解最小公倍数通常可以通过先计算它们的最大公约数(GCD)来实现,因为两个数的乘积除以它们的最大公约数即为最小公倍数。PPT中提到了欧几里得算法...

    HDOJ.zip_hduoj100题

    【HDOJ.zip_hduoj100题】是一个压缩包文件,包含了HDUOJ(杭州电子科技大学在线评测系统)的约100道编程练习题目及其源代码。这个资源对于想要提升编程技能,尤其是对算法和数据结构有深入学习需求的程序员来说,是...

    HDOJ1002

    ACM ICPC HDOJ1002

    HDOJ1001

    ACM ICPC HDOJ1001

    hdoj1001标程

    hdoj1001标程

Global site tag (gtag.js) - Google Analytics