题目:Line belt

题意:就是给你两条线段AB , CD ,一个人在AB上跑速度p, 在CD上跑q,在其他地方跑速度是r。问你从A到D最少的时间是好多。

#include<iostream>
#include<cmath>
#include <stdio.h>
using namespace std;
typedef struct
{
double x , y ;
}point;
point a,b,c,d;
int  p , q , r ;
const double eps = 1e-8;
double dis( point p1 , point p2 )
{
double l = (p2.x-p1.x ) * ( p2.x - p1.x ) + (p2.y-p1.y) * (p2.y - p1.y );
return sqrt(l) ;
}
double part(double k)
{
double Lx = 0 , Rx = dis(c, d);
point e , f1 ,f2;
for(int i = 0 ; i < 200 ;++i)
{
double len = Rx - Lx ;
double t1 = Lx  + len * 4/9;
double t2 = Lx  + len *5/9;
e.x = a.x + k * (b.x - a.x );
e.y = a.y + k * ( b.y -a.y );
f1.x = c.x + (t1 * (d.x - c.x ));
f1.y = c.y + (t1* (d.y - c.y ));
f2.x = c.x + (t2 * (d.x - c.x ));
f2.y = c.y + (t2 * (d.y - c.y ));
double res1 = dis(a,e)/p + dis(e,f1)/r + dis(f1,d)/q;
double res2 = dis(a,e)/p + dis(e,f2)/r + dis(f2,d)/q;
if( res1 < res2) Rx = t2 ;
else Lx = t1 ;
}
double t = (Lx+Rx)/2.0;
e.x = a.x + (k * (b.x - a.x ))  ;
e.y = a.y + (k * ( b.y -a.y )) ;
f1.x = c.x + (t * (d.x - c.x ));
f1.y = c.y + (t* (d.y - c.y));
return  dis(a,e)/p + dis(e,f1)/r + dis(f1,d)/q;
}
double solve(double Min , double Max )
{
double Lx = Min , Rx = Max ;
for(int i = 0 ; i < 200 ; ++i)
{
double len = Rx - Lx ;
double t1 = Lx + len * 4/9 ;
double t2 = Lx  + len* 5/9 ;
double f1 = part(t1);
double f2 = part(t2);
if( f1 < f2) Rx = t2 ;
else    Lx = t1;
}
return part((Lx+Rx)/2.0);
}
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("%d%d%d",&p,&q,&r);
double res = solve(0.0, 1.0);
printf("%.2f\n",res);
}
return 0 ;
}

HDU3400(计算几何中的三分法利用)相关推荐

  1. ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测...

    利用 ICMP 隧道穿透防火墙 转自:http://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/ 以前穿透防火墙总是使用 SSH 隧道 ...

  2. Java黑皮书课后题第8章:*8.34(几何:最右下角的点)在计算几何中经常需要从一个点集中找到最右下角的点。编写一个测试程序,提示用户输入6个点的坐标,然后显示最右下角的点

    *8.34(几何:最右下角的点)在计算几何中经常需要从一个点集中找到最右下角的点.编写一个测试程序,提示用户输入6个点的坐标,然后显示最右下角的点 题目 题目描述与运行示例 破题 代码 题目 题目描述 ...

  3. Java中list如何利用遍历进行删除操作

    转: Java中list如何利用遍历进行删除操作 2018年03月31日 10:23:41 Little White_007 阅读数:3874 Java三种遍历如何进行list的便利删除: 1.for ...

  4. 数据结构:试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来

    题目 试设计一个算法,改造一个带表头结点的双向链表,所有结点的原有次序保持在各个结点的右链域rLink中,并利用左链域ILink把所有结点按照其值从小到大的顺序连接起来 分析 Template < ...

  5. python接口测试非json的断言_荐在接口自动化测试中,如何利用Pytest + JSONPath 进行接口响应断言...

    之前有一篇文章,介绍了如何使用JSONSchema对接口响应进行断言,主要的适用场景是对响应的数据结构进行校验,保证客户端收到的数据结构稳定和合法.今天,介绍使用JSONPath对接口响应的值进行断言 ...

  6. 手机号码已经注册写到数据库中,如何利用相同手机号码再次注册?

    手机号码已经注册写到数据库中,如何利用相同手机号码再次注册? 解:删除数据库中以前注册的手机号码就可以了啊,delete那条记录, 转载于:https://www.cnblogs.com/panxue ...

  7. 浙江从小学生就上计算机课,废旧计算机在小学信息技术课中的再利用.doc

    废旧计算机在小学信息技术课中的再利用.doc 废旧计算机在小学信息技术课中的再利用 计算机知识是信息技术课程中很重要的内容,也是学生感兴趣的知识.浙江摄影出版社的<小学信息技术>(六年级上 ...

  8. C++中STL容器利用迭代器删除元素小结

    C++中STL容器利用迭代器删除元素小结 在STL容器中删除元素,容易导致迭代器失效,故应该清楚明白其用法,现在总结一下. 转载自:https://blog.csdn.net/yf_li123/art ...

  9. angularJS中localstorage,利用localstorage来实现其他页面获取本地缓存

    angularJS中localstorage,利用localstorage来实现其他页面获取本地缓存 下面是我的项目部分目录 下面是代码 这是loginPage_service.js页面的代码,用于向 ...

最新文章

  1. java+mysql中文乱码问题
  2. java启动参数_Java启动参数的思考
  3. sdi线缆标准_常见的视频信号传输线缆种类及传输距离线缆有哪些?
  4. html留言板代码_接口测试平台代码实现19.首页优化
  5. apk安装到电视上看不到图标_零基础搭建电视直播APP平台第二弹(修改APP)
  6. tomcat 发布到服务器启动不了
  7. [原创]三维建模软件的尝试
  8. Hazel引擎学习(二)
  9. html苹果笔记本文稿如何转换,苹果电脑的pages文档想要变成word格式该如何转换...
  10. TC4056A丝印1A 线性锂离子电池充电IC
  11. Windows10安装报错 由于存在受损的安装文件
  12. python控制excel打印_python对excel表格的操作
  13. 人到中年:“无爱、无话、无性”
  14. 源码分析学习记录(11)——半边结构
  15. IDEA使用AVD Manager创建AVD
  16. 如何登录虚拟主机服务器,如何登录虚拟主机服务器
  17. JustSoSo复现
  18. 计算机管理损坏的图像,win7系统提示损坏的图像的解决方法
  19. vue + element 使用 iframe
  20. 泰国ATM机被入侵致1200多万泰铢被盗,幕后黑客留疑团

热门文章

  1. HTTPS证书的申请过程
  2. 方法引用_通过super引用父类的成员方法
  3. Redis实现分布式锁原理SetNx命令
  4. 案例:返回固定页面的http服务器
  5. SpringBoot_日志-SpringBoot日志关系
  6. 设计模式之_工厂系列_03
  7. python优雅代码大全_代码这样写更优雅(Python版)
  8. linux 杀死脚本,linux – 如何在Bash脚本被杀死时杀死当前命令
  9. mozjpeg:JPEG图片压缩5%,获Facebook支持
  10. 使用redis的发布订阅模式实现消息队列