http://www.lydsy.com/JudgeOnline/problem.php?id=1857

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

——————————————————————————————

首先我们取AB一点E,CD一点F,则我们跑了AE+EF+FD。

考虑将其中一个点固定住,那么显然对于另一个点我们三分即可求出这个店的位置(显然该点有最小值,他的左右两点都比他大,所以为单峰函数)。

那么对于最开始的点,我们同样也是单峰函数,也可以三分(通过神奇的代数几何可以证明)

所以这题就是三分套三分。

PS:因为这题x1与x2可能相同,所以不能单独三分x或y,必须同时三分(不然代码量太大了)

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef double dl;
const int N=;
dl ax,ay,bx,by,cx,cy,dx,dy,P,Q,R;
inline dl dis(dl x,dl y,dl xx,dl yy){
return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
}
dl sff(dl x,dl y){
dl lx=cx,rx=dx,ly=cy,ry=dy;
dl lfx,lfy,rfx,rfy;
for(int i=;i<=N;i++){
lfx=(lx*+rx)/;lfy=(ly*+ry)/;
rfx=(lfx+rx)/;rfy=(lfy+ry)/;
dl t1=dis(lfx,lfy,dx,dy)/Q+dis(lfx,lfy,x,y)/R;
dl t2=dis(rfx,rfy,dx,dy)/Q+dis(rfx,rfy,x,y)/R;
if(t1<t2){
rx=rfx;ry=rfy;
}else{
lx=lfx;ly=lfy;
}
}
return dis(lx,ly,dx,dy)/Q+dis(lx,ly,x,y)/R+dis(x,y,ax,ay)/P;
}
dl sfe(dl lx,dl rx,dl ly,dl ry){
dl lex,ley,rex,rey;
for(int i=;i<=N;i++){
lex=(lx*+rx)/;ley=(ly*+ry)/;
rex=(lex+rx)/;rey=(ley+ry)/;
if(sff(lex,ley)<sff(rex,rey)){
rx=rex;ry=rey;
}else{
lx=lex;ly=ley;
}
}
return sff(lx,ly);
}
int main(){
cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy>>P>>Q>>R;
printf("%.2lf\n",sfe(ax,bx,ay,by));
return ;
}

BZOJ1857:[SCOI2010]传送带——题解的更多相关文章

  1. BZOJ1857 Scoi2010 传送带 【三分】

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

  2. 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)

    1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...

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

    题目链接 BZOJ1857 题解 画画图就发现实际上是在\(AB\)上和\(CD\)上分别选两个点\(E\),\(F\),使得\(t_{AE} + t_{EF} + t_{FD}\)最小 然后猜想到当 ...

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

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

  5. BZOJ1857[SCOI2010]传送带

    题目大意:平面上两条线段,一个人从一条线段的一个点到另一条线段的一个点,最小时间是多少 路径肯定是在一条线段上走一段,然后走平面,最后再走另一条线段,那么需要确定的就是在两条线段上走的距离,其他暴力算 ...

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

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

  7. 洛谷 P2571 [SCOI2010]传送带 题解

    每日一题 day51 打卡 Analysis 这道题是用非常恶心的三分套三分做的,有一个技巧是不要枚举坐标,枚举两条线段构成三角形的相似比就好了. 了解思路就还挺好写的(尽管我还调了三天) #incl ...

  8. P2571 [SCOI2010]传送带——hyl天梦

    P2571 [SCOI2010]传送带题解----天梦 如写的不好,请多见谅. 对于这道题,我首先想说,确实困惑了我好久,看网上的各种题解,却都不尽人意,思路早已明白,却不会操作.最后想想,还是觉得自 ...

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

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

随机推荐

  1. 前端图片转base64,转格式,转blob,上传的总结

    1. 图片文件转base64 <input accept="image/gif,image/jpeg,image/jpg,image/png" type="file ...

  2. 安装虚拟机以及ubuntu

    近期要用到linux,所以开始学习.想要在这里记录自己的学习之路 1.安装虚拟机以及装ubuntu系统 虚拟机就相当于一台电脑,电脑里得有系统,我们选择了ubuntu作为操作系统. 安装看下面的博客操 ...

  3. 聊聊WS-Federation

    本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...

  4. unity面试题一

    一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多线程,Unity的协程实在每帧结束之后去检测yield的条件是否满足. 二:Unity3d中 ...

  5. 会声会影X10x9x8最新教程

    会声会影X10x9x8最新最全教程,全部都是干货,包含素材的,下载地址:百度网盘, https://pan.baidu.com/s/1AyVS-C_VcTEz_ir70u08xQ 以下为部分内容截图: ...

  6. TPO-11 C1 Use the gym pass

    TPO-11 C1 Use the gym pass 第 1 段 1.Listen to a conversation between a student and a university emplo ...

  7. nginx web服务器的安装使用

    nginx是一个web服务器(高性能web服务器),类似于apache服务器和iis服务器,由于nginx服务器具有轻量级高并发的特点,目前nginx的使用已经超越了apache. nginx介绍:n ...

  8. POJ 1755 Triathlon(线性规划の半平面交)

    Description Triathlon is an athletic contest consisting of three consecutive sections that should be ...

  9. asp.net .net4.0使用异步编程

    "; Action<object> ac = (object obj) => { Debug.WriteLine("睡眠开始:" + DateTime. ...

  10. css深入理解之 border

    一 border-width不支持百分比值 1 不符合客观逻辑 2 w3成都一种约定吧 3 边框本身就像是一个包裹内容的界限 类似的还有outline,box-shadow text-shadow均不 ...