题目大意

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

分析

路线是A-线段-X-平面-Y-线段-D

可以发现两边都是单峰函数

证明不会(我连导都不会求) 挖坑

做法

三分AB中一点,再三分CD中一点

姿势

用结构体pt存,写起来就跟正常的浮点数三分一毛一样

solution

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
typedef double db;
using namespace std;
const db eps=1e-7; inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
} struct pt{
db x,y;
pt(db _x=0.0,db _y=0.0){x=_x;y=_y;}
};
pt operator +(pt x, pt y){return pt(x.x+y.x,x.y+y.y);}
pt operator -(pt x, pt y){return pt(x.x-y.x,x.y-y.y);}
pt operator *(pt x, db d){return pt(x.x*d,x.y*d);}
pt operator /(pt x, db d){return pt(x.x/d,x.y/d);}
db dot(pt x,pt y){return x.x*y.x+x.y*y.y;}
db cross(pt x,pt y){return x.x*y.y-x.y*y.x;}
db length(pt x){return sqrt(dot(x,x));}
db dis(pt x,pt y){return length(y-x);} pt A,B,C,D;
db P,Q,R; db calc(pt x){
pt l=C,r=D,m1,m2;
db tp1,tp2;
while(dis(l,r)>eps){
m1=(l+l+r)/3.0;
m2=(r+l+r)/3.0;
tp1=dis(m1,D)/Q+dis(x,m1)/R;
tp2=dis(m2,D)/Q+dis(x,m2)/R;
if(tp1<tp2) r=m2;
else l=m1;
}
tp1=dis(l,D)/Q+dis(x,l)/R;
tp2=dis(r,D)/Q+dis(x,r)/R;
return min(tp1,tp2);
} int main(){ #ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif int x,y;
x=rd(),y=rd(); A=pt(x,y);
x=rd(),y=rd(); B=pt(x,y);
x=rd(),y=rd(); C=pt(x,y);
x=rd(),y=rd(); D=pt(x,y);
x=rd(); P=x;
x=rd(); Q=x;
x=rd(); R=x; pt l=A,r=B,m1,m2;
db tp1,tp2;
while(dis(l,r)>eps){
m1=(l+l+r)/3.0;
m2=(r+l+r)/3.0;
tp1=calc(m1)+dis(A,m1)/P;
tp2=calc(m2)+dis(A,m2)/P;
if(tp1<tp2) r=m2;
else l=m1;
}
tp1=calc(l)+dis(A,l)/P;
tp2=calc(r)+dis(A,r)/P;
printf("%.2lf",min(tp1,tp2));
return 0;
}

bzoj 1857 三分套三分的更多相关文章

  1. Bzoj 1857: [Scoi2010]传送带(三分套三分)

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

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

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

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

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

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

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

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

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

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

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

  7. 三分套三分 --- HDU 3400 Line belt

    Line belt Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3400 Mean: 给出两条平行的线段AB, CD,然后一 ...

  8. [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】

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

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

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

  10. 【BZOJ1857】传送带(分治经典:三分套三分)

    点此看题面 大致题意: 一个二维平面上有两条传送带\(AB\)和\(CD\),\(AB\)传送带的移动速度为\(P\),\(CD\)传送带的移动速度为\(Q\),步行速度为\(R\),问你从\(A\) ...

随机推荐

  1. MFC中获得各种指针概述(个人觉得是很重要的重点)

    前言:这学期学习MFC(有点过时的东西),上课时,老师讲到获取当前活动指针,获取视图指针,文档指针,文档模板指针等(已晕) 后来下来真正写代码的时候发现这些几乎都是需要用到的东西,所以特此记录下,让自 ...

  2. iOS 打印系统字体

    NSArray * array = [UIFont familyNames]; for( NSString *familyName in array ){ printf( "Family: ...

  3. 【Python学习之七】面向对象高级编程——__slots__的使用

    1.Python中的属性和方法的绑定 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法. (1)首先,定义一个class:  class Stu ...

  4. Linux基础学习-LVM逻辑卷管理遇到的问题

    LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) ...

  5. LeetCode1090. 受标签影响的最大值

    问题: 我们有一个项的集合,其中第 i 项的值为 values[i],标签为 labels[i]. 我们从这些项中选出一个子集 S,这样一来: |S| <= num_wanted 对于任意的标签 ...

  6. json_encode() 避免转换中文

    json_encode() 避免转换中文 我们都知道,json_encode()可以将数据转换为json格式,而且只针对utf8编码的数据有效,而且在转换中文的时候,将中文转换成不可读的”\u***” ...

  7. php 计算当天凌晨时间戳 以及获取其他常用时间戳

    php 计算当日凌晨时间戳 以及获取其他常用时间戳(持续补充中...) 获取当天凌晨时间戳: echo strtotime(date('Y-m-d')); 以下再列举一些获取其他常用时间戳的方法 获取 ...

  8. OpenCV中的图像形态学转换

    两个基本的形态学操作是腐蚀和膨胀.他们的变化构成了开运算,闭运算,梯度等.下面以这张图为例 1.腐蚀 这个操作会把前景物体的边界腐蚀掉. import cv2 import numpy as np i ...

  9. python列表中的深浅copy

    列表中的赋值和平常的赋值是不一样的,看下面的代码: In [1]: a = 1 In [2]: b = a In [3]: a Out[3]: 1 In [4]: b Out[4]: 1 In [5] ...

  10. LeetCode(122) Best Time to Buy and Sell Stock II

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...