【BZOJ1857】【SCOI2010】传送带 [三分]

传送带

Time Limit: 1 Sec  Memory Limit: 64 MB
[Submit][Status][Discuss]

Description

  在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间

Input

  输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy 第三行是3个整数,分别是P,Q,R

Output

  输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位

Sample Input

  0 0 0 100
  100 0 100 100
  2 2 1

Sample Output

  136.60

HINT

  对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
  1<=P,Q,R<=10

Main idea

  给定平面上的两条线段AB,CD,在AB,CD上移动会有一个特别的速度,在平面上移动会有一个速度,求从点A到点D的最短时间。

Solution

  首先发现坐标范围-1000~1000,并且精度要求不高,从此基础上思考。我们先考虑从AB上一个定点O到CD上的距离,发现其中从O到CD的距离是先减小再增大的,我们大胆猜测这道题的答案满足单峰性。然后我们可以用三分(效率为O(log1.5(n)))来实现。
  我们现在可以求出一个定点求CD的最短时间,这里用三分实现。然后怎么办呢?
  由于AB也是一条线段,我们大胆猜测,可以再在AB上三分一个点,这样就是三分套三分,最后发现其正确性可以证明。
  三分方法(这里给出求最小值的方法):在区间1/3处和2/3处各取两个点l,r,如果左段(即L~l)的答案比右段(r~R)的更优,那么由于单峰性(图像类似一个抛物线)可以抹去右段,多次操作使得答案最优。

Code

 1 #include<iostream>  
 2 #include<algorithm>  
 3 #include<cstdio>  
 4 #include<cstring>  
 5 #include<cstdlib>  
 6 #include<cmath>
 7 #include<queue>
 8 using namespace std;  
 9       
10 const int ONE=1005;
11 const int MOD=19650827;
12 
13 int n;
14 
15 struct power
16 {
17         double x,y;
18         double AB,CD,PM;
19         friend power operator +(power a,power b) {a.x=a.x+b.x; a.y=a.y+b.y; return a;}
20         friend power operator -(power a,power b) {a.x=a.x-b.x; a.y=a.y-b.y; return a;}
21         
22 };
23 power A,B,C,D,v;
24 power l1,l2,r1,r2;
25 power a,b;
26 power pass;
27 
28 int get()
29 {
30         int res,Q=1;    char c;
31         while( (c=getchar())<48 || c>57)
32         if(c=='-')Q=-1;
33         if(Q) res=c-48; 
34         while((c=getchar())>=48 && c<=57) 
35         res=res*10+c-48; 
36         return res*Q; 
37 }
38 
39 double dist(power a,power b)
40 {
41         return (double)sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
42 }
43 
44 double Getdist(power E,power F)
45 {
46         return dist(A,E)/v.AB + dist(E,F)/v.PM + dist(F,D)/v.CD;
47 }
48 
49 double Trivide(power O)
50 {
51         power l=C,r=D,pass,a,b;
52         while(dist(l,r)>0.001)
53         {
54             pass.x=(r.x-l.x)/3.0;    pass.y=(r.y-l.y)/3.0;
55             a=l+pass;    b=r-pass;
56             if(Getdist(O,a) < Getdist(O,b)) r=b;
57             else l=a;
58         }
59         return Getdist(O,l);
60 }
61 
62 int main()
63 {
64         scanf("%lf %lf %lf %lf",&A.x,&A.y,&B.x,&B.y);
65         scanf("%lf %lf %lf %lf",&C.x,&C.y,&D.x,&D.y);
66         scanf("%lf %lf %lf",&v.AB,&v.CD,&v.PM);    
67         
68         power l=A,r=B;
69         while(dist(l,r)>0.001)
70         {
71             pass.x=(r.x-l.x)/3.0;    pass.y=(r.y-l.y)/3.0;
72             a=l+pass;    b=r-pass;
73             if(Trivide(a) < Trivide(b)) r=b;
74             else l=a;
75         }
76         
77         printf("%.2lf",Trivide(l));
78 }
View Code

 

转载于:https://www.cnblogs.com/BearChild/p/6441257.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

google android广告异步加载,谷歌广告异步代码和同步代码的解决方法

通常大部分人初次接触谷歌google adsense广告联盟都会有疑问&#xff0c;在新建单元界面我们可以看到获取代码类型选项。下面是学习啦小编为大家整理的关于谷歌广告异步代码和同步代码的解决方法&#xff0c;一起来看看吧!谷歌广告异步代码和同步代码的解决方法选择同步还是异步…

使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用

使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用 原文:使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用Elasticsearch的安装 一、elasticsearch的安装 1.镜像拉取 docker pull elasticsearch:tag2.启动 docker run -it -e "disc…

Spring 的持久化实例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...

2019独角兽企业重金招聘Python工程师标准>>> 一、表&#xff08;这里用mysql&#xff0c;数据库名为yiibai&#xff09; CREATE TABLE customer (CUST_ID int(10) UNSIGNED NOT NULL,NAME varchar(100) NOT NULL,AGE int(10) UNSIGNED NOT NULL ) ENGINEInnoDB DEFA…

麦克劳林展开式_数学家麦克劳林与牛顿的故事

数学家麦克劳林麦克劳林(Colin Maclaurin1698年2月-1746年6月), 苏格兰数学家&#xff0c;麦克劳林是18世纪英国最具有影响的数学家之一。01麦克劳林是一位牧师的儿子&#xff0c;半岁丧父&#xff0c;9岁丧母。由其叔父抚养成人。叔父也是一位牧师。麦克劳林是一个“神童”&am…

微信小程序把玩(三十三)Record API

微信小程序把玩&#xff08;三十三&#xff09;Record API 原文:微信小程序把玩&#xff08;三十三&#xff09;Record API其实这个API也挺奇葩的&#xff0c;录音结束后success不走&#xff0c;complete不走&#xff0c;fail也不走&#xff0c; 不知道是不是因为电脑测试的原因…

如何获取元素在父级div里的位置_关于元素的浮动你了解多少

首先&#xff0c;在介绍什么是浮动之前我们先介绍一下html中元素的普通流布局方式。在普通流中&#xff0c;元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的&#xff0c;在排列过程中所有的行内元素水平排列&#xff0c;直到当行被占满然后换行&#xff0c;块级…

Java电商项目-5.内容管理cms系统

目录 实现加载内容分类树功能实现内容分类动态添加删除内容分类节点实现内容分类节点的分页显示实现广告内容的添加实现广告内容删除实现广告内容编辑到Github获取源码请点击此处实现加载内容分类树功能 注: 往后将不在说编写远程服务方法和编写web模块等重复语句, 直接用"…

【JS新手教程】LODOP打印复选框选中的任务或页数

之前的博文&#xff1a;【JS新手教程】LODOP打印复选框选中的内容关于任务&#xff1a;Lodop打印语句最基本结构介绍&#xff08;什么是一个任务&#xff09;关于本文用到的JS的eval方法&#xff1a;JS-JAVASCRIPT的eval()方法该文用的是不同checkbox&#xff0c;对应不同的val…

查询范围_企二哥:查询企业经营范围的三种方法

一、查询企业经营范围的三种方法1. 进经营地的工商局网站,有个“全国企业信用信息公示系统”进去后输入公司名称搜索就出来了。2. 有个软件叫做天眼查&#xff0c;打开天眼查输入要查询的公司名称&#xff0c;就可以搜出来了。不光是经营范围&#xff0c;还有许多和企业相关的资…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…

Haproxy+Keepalived实现负载均衡

HaproxyKeepalived实现负载均衡HAProxy介绍反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入新的1.3引入了frontend,backend&#xff1b;f…

C#使用CLR/C++的DLL间接调用Native C++的DLL

C#使用CLR/C的DLL间接调用Native C的DLL 开发环境&#xff1a;win 7 VS2010 简介&#xff1a;C#的exe使用CLR/C间接调用Native C的DLL. 第一步&#xff1a;创建一个C#的Console Application工程-->命名“ConsoleApplication1”。 第二步&#xff1a;创建一个CLR/C的工程&am…

列表输出循环左移_python 列表推导式(经典代码)(21)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python截止到目前为止&#xff0c;python基础内容已经学习了50%左右&#xff0c;在学习编程过程中&#xff0c;我们不仅要学习python语法&#xff0c;同时也需要学习如何把自己代码写的更美观&#xff0c;效率更高。一.…

Robot Framework自动化测试(一)--- 安装

所需环境&#xff1a; 1、python 2、robotframework  https://pypi.python.org/pypi/robotframework/2.8.5#downloads 3、wxPython ——>是python的一个GUI库&#xff0c;下面要安装的RIDE是基于这个库开发的&#xff0c;所以要安装 地址&#xff1a;https://wxpython.org…

linux_svn命令操作

转至元数据起始 linux下svn命令大全 1、将文件checkout到本地目录 svn checkout path&#xff08;path是服务器上的目录&#xff09;例如&#xff1a;svn checkout svn://192.168.1.1/pro/domain简写&#xff1a;svn co 2、往版本库中添加新的文件 svn add file例如&#xff1a…

html怎么让五张照片并排显示,最考验右脑5张照片,30s内能发现问题都是牛人,PS做不出来...

我们的大脑认定这种空间不可能存在&#xff0c;然而却要忍受眼睛亲眼所见其存在的苦恼。“眼见为实”已经成为错误的判断标准&#xff0c;于是你会感到很过瘾&#xff0c;颠覆的快感。事实上&#xff0c;通过色彩&#xff0c;不仅可以考量人们的视力&#xff0c;更能判断大脑水…

Cloud in Action: Install OpenStack Ocata from scratch

Cloud in Action: Install OpenStack Ocata from scratch薛国锋 xueguofeng2011gmail.comOpenStack can control and manage large pools of compute, storage, and networking resources throughout a datacenter, througha dashboard or via the OpenStack API, and work…

CentOS7配置ip

CentOS7配置ip 安装完centos7,重启就可以与linux第一次接触了。我是最小化安装&#xff0c;所以没有图形界面。登录介面显示发型版本和内核版本&#xff1a; CentOS Linux 7(Core) Kernel 3.10.0-862.e17.x86_64 on an x86_64 下面就是登录提示localhost login。在后面输入roo…

Spring Cloud Config服务端配置细节(一)

上篇文章我们看了Spring Cloud中分布式配置中心的一个基本使用&#xff0c;这里边还涉及到许多细节&#xff0c;本文我们就来看看服务端配置中的一些细节。 本文是Spring Cloud系列的第二十三篇文章&#xff0c;了解前二十二篇文章内容有助于更好的理解本文&#xff1a; 1.使用…