P2571 [SCOI2010]传送带

三分套三分。

前提条件:P3382 【模板】三分法

三分,求区间内单峰函数的最大/最小值。

我们把两条线段都跑三分,先ab后cd,求出最小值。

可以直接将二维坐标进行三分,为了方便编写,不一定非要取三等分点。代码中取的是中点和一个四等分点。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef double db;
inline db _min(const db &a,const db &b) {return a<b ?a:b;}
const db eps=1e-;
struct node{db x,y;}a,b,c,d; //存坐标
db p,q,r;
inline db dist(node &A,node &B) {return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));}
inline db F(node &n,node &m) {return dist(a,n)/p+dist(n,m)/r+dist(m,d)/q;} //总距离计算
inline db sec(node &A){
node l1=c,r1=d,l2,r2; db ans=1e9;
do{
l2.x=(l1.x+r1.x)/2.0,l2.y=(l1.y+r1.y)/2.0;
r2.x=(l2.x+r1.x)/2.0,r2.y=(l2.y+r1.y)/2.0;
db q1=F(A,l2),q2=F(A,r2);
if(q1>q2) l1=l2;
else r1=r2;
ans=_min(ans,_min(q1,q2));
}while(fabs(r1.x-l1.x)>=eps||fabs(r1.y-l1.y)>=eps);
return ans;
}
int main(){
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
scanf("%lf%lf%lf",&p,&q,&r);
node l1=a,r1=b,l2,r2; db ans=1e9;
do{
l2.x=(l1.x+r1.x)/2.0,l2.y=(l1.y+r1.y)/2.0; //取中点
r2.x=(l2.x+r1.x)/2.0,r2.y=(l2.y+r1.y)/2.0; //取四等分点
db q1=sec(l2),q2=sec(r2); //在cd上三分
if(q1>q2) l1=l2;
else r1=r2;
ans=_min(ans,_min(q1,q2));
}while(fabs(r1.x-l1.x)>=eps||fabs(r1.y-l1.y)>=eps); //使用do-while循环是防止线段退化成一个点的情况时直接跳出(如a,b重合)
printf("%.2lf",ans);
return ;
}

P2571 [SCOI2010]传送带的更多相关文章

  1. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

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

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

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

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

  4. [洛谷P2571] [SCOI2010]传送带

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

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

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

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

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

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

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

  8. [SCOI2010]传送带 三分法

    [SCOI2010]传送带 LG传送门 三分法模板. 关于为什么可以三分,我选择感性理解,有人证明了,总之我是懒得证了. 假设路径是\(A \to E \to F \to D\),\(E\)和\(F\ ...

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

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

随机推荐

  1. Vim多行编辑

    vim编辑文档有时候需要多行同时插入或者删除,比如多行加注释应该怎么操作 vim进了多行编辑模式:<ESC>之后按CTRL+V进入visual block模式(列编辑). 光标移到某行行首 ...

  2. 记一次Castle报错

    CJXX.ServiceTest.PersonRelationMgeSvrTest.GetPersonRelation:SetUp : Castle.MicroKernel.ComponentActi ...

  3. uploadify3.2.1 多文件上传总是只能上传一个文件

    再网上找了老半天原因,有人说是上传时调用方法参数应该加上*号(:$('#mulfile_upload').uploadify('upload','*');) 总是不行, 我怀疑下面的原因: 我就以为是 ...

  4. CTP API开发之一:CTP API简介

    官网下载CTP API 综合交易平台CTP(Comprehensive Transaction Platform)是由上海期货信息技术有限公司(上海期货交易所的全资子公司)开发的期货交易平台,CTP平 ...

  5. function &w(){}

    CodeIgniter 3.1.0 <?php //\system\core\Common.php function &load_class($class, $directory = ' ...

  6. Callable接口解析

    1.接口的定义: public interface Callable<V> { V call() throws Exception; } 2.Callable和Runnable的异同 先看 ...

  7. 启动HDFS

    $cd /app/hadoop/hadoop-2.2.0/sbin $./start-dfs.sh

  8. [py][mx]xadmin详细设置-将app注册到xadmin

    首先createsuperuser,创建用户, 然后登陆xadmin. 理解下models的各个字段 复数形式及返回 注册app users/adminx.py 显示字段 users/adminx.p ...

  9. [py]python面向对象的str getattr特殊方法

    本文旨在说清楚 类中的 def init def str def getattr 这三个方法怎么用的. 定制输入实例名时输出内容 def __str__会定制输出实例名时候的输出 class Chai ...

  10. PAT 1020 Tree Traversals[二叉树遍历]

    1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...