【BZOJ1857】传送带(三分)

题面

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

题解

又是一道很有意思的题目

现在相当于要求一个函数的最小值

自然要YY是一个下凸函数

然后就首先在AB线段上三分一个点出来算答案

答案怎么算了,那自然在CD线段上先找一个点,在计算吧。

继续YY这也是一个下凸函数

所以又来一次三分

然后就蜜汁的做完了。

但是,这题也很迷,三分的时候请使用do-while

否则会有奇怪的数据,因为点挨得很近

导致三分没有进行

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define esp 1e-5
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
double A1,B1,A2,B2,Lx,Rx,Ly,Ry;
double Ax,Ay,Bx,By,Cx,Cy,Dx,Dy;
double P,Q,RR;
double Dis(double x,double y,double X,double Y)
{
return sqrt((x-X)*(x-X)+(y-Y)*(y-Y));
}
double Count(double xx,double yy)
{
double lx=Cx,rx=Dx;
double ly=Cy,ry=Dy;
double ret=0;
do
{
double m1=(rx-lx)/3+lx,z1=(ry-ly)/3+ly;
double m2=lx+rx-m1,z2=ly+ry-z1;
double tt1=Dis(Ax,Ay,xx,yy)/P+Dis(xx,yy,m1,z1)/RR+Dis(m1,z1,Dx,Dy)/Q;
double tt2=Dis(Ax,Ay,xx,yy)/P+Dis(xx,yy,m2,z2)/RR+Dis(m2,z2,Dx,Dy)/Q;
if(tt1>tt2)lx=m1,ly=z1,ret=tt2;
else rx=m2,ry=z2,ret=tt1;
}while(fabs(lx-rx)>esp||fabs(ly-ry)>esp);
return ret;
}
int main()
{
Ax=read();Ay=read();Bx=read();By=read();
Cx=read();Cy=read();Dx=read();Dy=read();
P=read();Q=read();RR=read();
Lx=Ax,Rx=Bx;
Ly=Ay,Ry=By;
double ans=0;
do
{
double mx1=(Rx-Lx)/3+Lx,my1=(Ry-Ly)/3+Ly;
double mx2=Lx+Rx-mx1,my2=Ly+Ry-my1;
double k1=Count(mx1,my1),k2=Count(mx2,my2);
if(k1>k2)Lx=mx1,Ly=my1,ans=k1;
else Rx=mx2,Ry=my2,ans=k2;
}while(fabs(Rx-Lx)>esp||fabs(Ry-Ly)>esp);
printf("%.2lf\n",ans);
return 0;
}

【BZOJ1857】传送带(三分)的更多相关文章

  1. 【BZOJ1857】[Scoi2010]传送带 三分套三分

    [BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...

  2. 【BZOJ-1857】传送带 三分套三分

    1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1077  Solved: 575[Submit][Status][ ...

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

    传送带 Time Limit: 1 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 在一个2维平面上有两条传送带,每一条传送 ...

  4. bzoj1857: [Scoi2010]传送带--三分套三分

    三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...

  5. [BZOJ1857][SCOI2010]传送带-[三分]

    Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...

  6. BZOJ 1857 传送带 (三分套三分)

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...

  7. bzoj 1857: [Scoi2010]传送带 三分

    题目链接 1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 934  Solved: 501[Submit][Stat ...

  8. BZOJ1857 传送带 (三分法求单峰函数极值)

    第一次发BZOJ的题解,先从水题开始吧,好不容易找到一道水题,那就从这题开始吧. 1.题设部分{ 题目描述: 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线 ...

  9. 洛谷P2571 [SCOI2010]传送带 [三分]

    题目传送门 传送带 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移 ...

  10. loj10017. 「一本通 1.2 练习 4」传送带(三分套三分)

    题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...

随机推荐

  1. LeetCode - 661. Image Smoother

    Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother t ...

  2. linux 内核参数优化

    Sysctl命令及linux内核参数调整   一.Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现.   ...

  3. SDP(8):文本式数据库-MongoDB-Scala基本操作

    MongoDB是一种文本式数据库.与传统的关系式数据库最大不同是MongoDB没有标准的格式要求,即没有schema,合适高效处理当今由互联网+商业产生的多元多态数据.MongoDB也是一种分布式数据 ...

  4. js中的回调函数

    1.你定义的 2.你没有调用 3.但是最终他执行了 例子: 定时器回调函数 setTimeout(function(){ },100); dom元素的回调函数 document.getElementB ...

  5. JDBC编程流程以及详细代码

    加载驱动 打开连接 执行查询 处理结果 清理环境 import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Co ...

  6. No new migrations found. Your system is up-to-date.处理

    显然是migrations表中存储的相关操作记录了,删除就好了!!!

  7. Flask從入門到入土(一)——程序的基本結構

    一.初始化 所有Flask程序都必須創建一個程序實例.Web服務器使用一種名爲Web服務器網關接口的協議,把接收自客戶端的所有請求都轉交給這個對象處理.程序實例書Flask類的對象,創建代碼: fro ...

  8. 遇见JMS[1] —— activeMQ的简单使用

    1.JMS Java Message Service,提供API,供两个应用程序或者分布式应用之间异步通信,以传送消息. 2.相关概念 提供者:实现JMS规范的消息中间件服务器客户端:发送或接收消息的 ...

  9. 浅谈JavaScript位操作符

    因为ECMAscript中所有数值都是以IEEE-75464格式存储,所以才会诞生了位操作符的概念. 位操作符作用于最基本的层次上,因为数值按位存储,所以位操作符的作用也就是操作数值的位.不过位操作符 ...

  10. eclipse生成【带有外部jar包】的java可执行jar包

    之前有写过一篇使用eclipse生成java可执行jar包,但是最近的一次使用中无论如何都不成功,当双击执行打成的jar时,弹出如下错误: could not find the main class: ...