【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;一起来看看吧!谷歌广告异步代码和同步代码的解决方法选择同步还是异步…

openssl 加密解密 指令_Shell openssl命令加密解密字符串

Linux下的 openssl 命令解密我们以在线加密网站为例 http://tool.chacuo.net/cryptdes我们选择des cbc模式&#xff0c;密钥为abcdefgh&#xff0c; 偏移量为12345678&#xff0c;以base64输出结果 对hello进行加密&#xff0c;得到结果8Snw/EmQdY我们再用将在线网站改用shell命…

使用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…

开始使用gradle

前提配置gradle环境 每个gradle构建都是以一个脚本开始的。gradle构建默认的名称为build.gradle。当在shell中执行gradle命令时&#xff0c;gradle会去寻找为build.gradle文件&#xff0c;如果找不到就会显示帮助信息。 下面我们以经典的helloworld为例。 1、首先建立一个build…

freecodecamp_freeCodeCamp的新编码课程现已上线,其中包含1,400个编码课程和6个开发人员认证

freecodecampFor the past year, our community has been hard at work on a massive new programming curriculum. And now that curriculum is live and out of beta!在过去的一年中&#xff0c;我们的社区一直在努力编写大量的新编程课程。 现在&#xff0c;该课程已上线并且…

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

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

html隐藏层点击显示不出来,[js+css]点击隐藏层,点击另外层不能隐藏原层

1货币转换&#xff0c;下图显示了这个程序子只进行简单的 把元素放在下面的目录下&#xff0c;在创币转换应用程序这个例 所需的界面&#xff0c;包括一些UI组件实例(Button, ComboB 货币转换&#xff0c;下图显示了这个程序组件实例(Button, ComboB 货币转换&#xff0c;下图显…

Oracle 10.2.0.5 非归档current redolog损坏处理一例

操作系统: RHEL5.8 x64数据库 : Oracle 10.2.0.5.0故障情况:一台单机曙光PC服务器4块300G SAS盘&#xff0c;RAID5坏两块磁盘&#xff08;服务器面板无故障提示&#xff0c;无人发现&#xff09;&#xff0c;造成RAID5磁盘阵列挂掉&#xff0c;操作系统当机&#xff0c;系统无…

基础命令

date --help date %T 15:04:58 whatis date date (1) - print or set the system date and timeman date 获取详细的命令解释cd ~/wntlab //新建文件夹 mkdir example //新建文件 touch b c //复制文本内容 cp b c//把 b的内容复制给 c cp b a/ //把 文件b复制…

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

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

leetcode336. 回文对(字典树)

给定一组 互不相同 的单词&#xff0c; 找出所有不同 的索引对(i, j)&#xff0c;使得列表中的两个单词&#xff0c; words[i] words[j] &#xff0c;可拼接成回文串。 示例 1&#xff1a; 输入&#xff1a;[“abcd”,“dcba”,“lls”,“s”,“sssll”] 输出&#xff1a;[[…

html文档 字符引用,【转】HTML中常见形如#number;的东西叫做 字符实体引用,简称引用,代表一个对应的unicode字符...

【转】HTML中常见形如number;的东西叫做 字符实体引用&#xff0c;简称引用&#xff0c;代表一个对应的unicode字符英文解释的很清楚&#xff0c;就不翻译了&#xff0c;自己看&#xff1a;EntitiesCharacter entity references, or entities for short, provide a method of e…

终端打开后-bash_如何爵士化Bash终端-带有图片的分步指南

终端打开后-bashby rajaraodv通过rajaraodv In this blog I’ll go over the steps to add Themes, Powerline, fonts, and powerline-gitstatus to make your regular Bash Terminal look beautiful and useful as shown in the picture above.在此博客中&#xff0c;我将介绍…

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

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

获取iOS顶部状态栏和Navigation的高度

状态栏的高度 20 [[UIApplication sharedApplication] statusBarFrame].size.height Navigation的高度 44 self.navigationController.navigationBar.frame.size.height 加起来一共是64 转载于:https://www.cnblogs.com/Free-Thinker/p/6478715.html

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

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

leetcode738. 单调递增的数字(贪心)

给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff09; 示例 1: 输入: …

MySQL purge 线程

MySQL中purge线程知识&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.htmlInnoDB中delete所做删除只是标记为删除的状态&#xff0c;实际上并没有删除掉&#xff0c;因为MVCC机制的存在&#xff0c;要保留之前的版本为并发所使用。最终…

安装inde.html使用babel,reactjs – 使用Babel Standalone进行单个React组件渲染,仅使用index.html和Component...

Noob与React在这里.我正在玩React.我有一个简单的组件在我的component.js中呈现.它包含在我的index.html文件中.我在头部包含了React,ReactDOM和babel的脚本.我只想看到一个div正确渲染.我还没有使用Node,只是使用React和Babel(使用babel-standalone).我正在使用一个简单的http…