[bzoj1857][三分法]传送带

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的坐标,分别为... 阅读详情

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

题解

对于一条线段,设他的开始点为A,结束点为B
设枚举了一个点u,暂时不看另外一条线段,直接设他到D点
那么通过点u到达D的时间其实就是线段Au和线段uD,分别除速度
然后意会一下,在u逐渐远离A的过程中,Au会增大而uD会减小,除以速度后其实是一个二次函数,那么这是有顶点的嘛,所以我们三分
那另一条线段怎么处理呢?也是一样啊,对于我们第一条线段三分出来的答案,我们第二条线段三分最优点与之配对。所以就是三分套三分啦
代码可读性 应该还是有的

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const double eps=1e-4;
double ans=0.0,p,q,R;
double ax,ay,bx,by,cx,cy,dx,dy;
double K[2],B[2];
void gt(double x1,double y1,double x2,double y2,int op)
{
    K[op]=(y1-y2)/(x1-x2);
    B[op]=y1-K[op]*x1;
}
double sqr(double u){return u*u;}
double dis(double x1,double y1,double x2,double y2){return sqrt(sqr(x1-x2)+sqr(y1-y2));}
double fd(double x1,double y1,double U)
{
    double V=K[1]*U+B[1];
    return dis(ax,ay,x1,y1)/p+dis(x1,y1,U,V)/R+dis(U,V,dx,dy)/q;
}
double fda(double x1,double y1,double V)
{
    double U=cx;
    return dis(ax,ay,x1,y1)/p+dis(x1,y1,U,V)/R+dis(U,V,dx,dy)/q;
}
double fdsum(double u)
{
    double v=K[0]*u+B[0];
    double ll=min(cx,dx),rr=max(cx,dx);
    if(cx!=dx)
    {
        while(ll+eps<=rr)
        {
            double midx=(ll+rr)/2;
            double mmidx=(midx+rr)/2;
            if(fd(u,v,midx)<fd(u,v,mmidx))rr=mmidx;
            else ll=midx;
        }
        return fd(u,v,ll);
    }
    else
    {
        ll=min(cy,dy),rr=max(cy,dy);
        while(ll+eps<=rr)
        {
            double midx=(ll+rr)/2;
            double mmidx=(midx+rr)/2;
            if(fda(u,v,midx)<fda(u,v,mmidx))rr=mmidx;
            else ll=midx;
        }
        return fda(u,v,ll);
    }
}
double check(double v)
{
    double u=ax;
    double ll=min(cx,dx),rr=max(cx,dx);
    if(cx!=dx)
    {
        while(ll+eps<=rr)
        {
            double midx=(ll+rr)/2;
            double mmidx=(midx+rr)/2;
            if(fd(u,v,midx)<fd(u,v,mmidx))rr=mmidx;
            else ll=midx;
        }
        return fd(u,v,ll);
    }
    else
    {
        ll=min(cy,dy),rr=max(cy,dy);
        while(ll+eps<=rr)
        {
            double midx=(ll+rr)/2;
            double mmidx=(midx+rr)/2;
            if(fda(u,v,midx)<fda(u,v,mmidx))rr=mmidx;
            else ll=midx;
        }
        return fda(u,v,ll);
    }
}
int main()
{
    scanf("%lf%lf%lf%lf",&ax,&ay,&bx,&by);
    if(ax!=bx)gt(ax,ay,bx,by,0);
    scanf("%lf%lf%lf%lf",&cx,&cy,&dx,&dy);
    if(cx!=dx)gt(cx,cy,dx,dy,1);
    scanf("%lf%lf%lf",&p,&q,&R);
    if(ax==bx)
    {
        double l=min(ay,by),r=max(ay,by);
        while(l+eps<=r)
        {
            double mid=(l+r)/2;
            double mmid=(mid+r)/2;
            if(check(mid)<check(mmid))r=mmid;
            else l=mid;
        }
        printf("%.2lf\n",check(l));
    }
    else
    {
        double l=min(ax,bx),r=max(ax,bx);
        while(l+eps<=r)
        {
            double mid=(l+r)/2;
            double mmid=(mid+r)/2;
            if(fdsum(mid)<fdsum(mmid))r=mmid;
            else l=mid;
        }
        printf("%.2lf\n",fdsum(l));
    }
    return 0;
}
[BZOJ 3330] 分数 三分法+精度优化 题目传送门:【BZOJ 3330】题目大意:出题最困难的地方在于调控分数,题目必须让选手之间的差异体现出来。而参加考试的选手的能力水平分布严重影响了题目的得分分布,适合一个省份的题目换到另一个省份可能就会变得没有意义。这里面有一个微妙的关系。为了更好地把握题目的难度,小强建立了一个模型,每个选手的实力都是一个 0 到 100 之间的实数。小强可以掌控一个题目的“难度”和“区分度”。一个选手的得分是: 阅读详情

相关推荐

汉字转拼音,拼音字典

详见 http://blog.youkuaiyun.com/q158805972/article/details/79585032

我的背景!

我19岁在电脑维修点上班,卖电脑和维修电脑。 23岁决定回家学编程,因为那老板说学好编程能年薪百万。。 我居然真信了他的鬼话,花了2万去了北大青鸟培训Java软件开发。 结果爱上了C#,却不喜欢java,感觉java就像云里看雾。搞什么web服务器的。我完全不懂,而且一大堆框架。。 现在4年后,才理解什么是服务端开发。。 我还回家学了C++,1年和D3D9游戏开发浅墨写的。 写了个demo给女同学表白。 ...

体力无边,干倒一切。 244

2021-10-05 二分三分算法 求解最小值 传送带(951G)

传送带 951G 来源:牛客网 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB\text{AB}AB和线段CD\text{CD}CD。lxhgww在AB\text{AB}AB上的移动速度为P,在CD\text{CD}CD上的移动速度为Q,在平面上的移动速度R。 现在lxhgww想从A点走到D点,他想知道最少需要走多长时间。 输入描述: 输入数据第一行是4...

Jjjyt09的博客 654

Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案

【代码】Android Studio运行报错: failed to load include path ……\platforms\android-35\android.jar的最细解决方案。

2401_86789230的博客 2万+

扫地机器人自动回充技术大揭秘:红外、蓝牙、雷达哪种更适合你家?

本文深入解析扫地机器人自动回充技术的三种主流方案:红外、蓝牙和雷达/LiDAR,详细比较它们的原理、优缺点及适用场景。红外技术成本低但易受干扰,蓝牙穿透性好但精度随距离降低,雷达精度最高适合复杂环境。根据户型大小和家居环境,提供选购建议,帮助用户选择最适合自己家庭的自动回充方案。

weixin_29070721的博客 504

【bzoj1857】[Scoi2010]传送带 三分法

三分法 这个问题看上去像是单峰的,于是可以三分求答案 大致思路是当前区间为[l,r] mid=(l+r)/2,midmid=(mid+r)/2 如果mid比较靠近极值点,则r=midmid 如果midmid比较靠近极值点,则l=mid 首先三分出AB上的点E,表示先从A走到点E 然后三分出CD上的点F,表示从点E走到点F,再走到点D 三分套三分 #includ

Oxer的专栏 893

第四节、C# 上位机面向对象编程详解(工控硬件继承实战版)

继承核心价值:在 C# 上位机工控开发中,继承的核心是通用逻辑复用与接口统一,将所有硬件的通用属性 / 方法封装到抽象基类,子类只需实现独有逻辑,大幅减少冗余代码。基类设计要点:优先使用抽象基类,合理分配访问修饰符(privateprotectedpublic),定义通用事件与虚方法,提供资源释放机制,兼顾复用性与扩展性。子类设计要点:通过: base()调用基类构造函数,强制实现抽象方法(保证接口统一),选择性重写虚方法(实现独有逻辑),复用基类的protected成员。多设备管理。

kylezhao2019的博客 787

BZOJ 1857 SCOI 2010 传送带 三分法

题目大意:给出平面上两条线段,在这两条线段上走有一定的速度,在其他的平面上走也有一定的速度,问从A点到D点最少需要多少时间。 思路:好像是三分吧,大概感受一下吧,反正也不会证。 CODE: #include #include #include #include #include #include #define EPS 1e-7 #define INF 1e1

(╯°口°)╯(┴—┴ 1144

Android Profiler实战:如何用CPU分析工具揪出卡顿元凶(附线程状态解读)

本文深入解析Android Profiler中的CPU分析工具,重点聚焦线程活动监控。通过解读线程状态时间轴上的绿、黄、灰三色含义,并结合实战案例,指导开发者精准定位导致界面卡顿的CPU密集型或I/O阻塞代码,有效提升应用性能与用户体验。

weixin_29197699的博客 372

【实战篇导读】四足机器人运动控制导读

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对四足机器人运动运动控制系统及相关算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章主要介绍了波士顿spot机器人的发展历史、四足机器人的硬件系统及电机执行器组成包括硬件系统、关节电机执行器,机载传感器机处理器及电气连接等。概述了四足机器人规划控制、感知、定位及局部地图的相关算法方向。

qq_35635374的博客 679

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

题目链接 BZOJ1857 题解 画画图就发现实际上是在\(AB\)上和\(CD\)上分别选两个点\(E\),\(F\),使得\(t_{AE} + t_{EF} + t_{FD}\)最小 然后猜想到当\(E\)固定时,这个值的函数关于\(|CF|\)是下凸的 当\(F\)总取最优时,关于\(|AE|\)也是下凸的 感觉十分的对 两层三分即可 #include<algorithm> #i...

weixin_30237281的博客 101

手把手教你模拟登录豆瓣并爬取个人书影音数据:从Cookie解析到反爬攻防实战

在开始写代码之前,先明确我们需要的工具。:建议用3.10以上版本,方便使用一些新特性(如match语句)httpx:比requests更现代,支持HTTP/2,异步性能强,连接池复用好:解析HTML,语法简单,容错性强selenium:仅用于处理登录时的滑块验证(模拟真人)pandas:最终数据清洗和导出Excel/CSVretrying:自动重试机制,应对临时封禁:随机UA,降低特征lxml:作为BeautifulSoup的解析器,速度快为什么不只用requests?

2201_76125261的博客 577

BZOJ - 1857

题目链接:BZOJ - 1857 显然最优解一定是从点a到传送带1的某一点,然后这个点到传送带2某一点,然后到点d。 显然距离具有三分性。 所以三分套三分解出两个点即可。 AC代码: #pragma GCC optimize("-Ofast","-funroll-all-loops") #include<bits/stdc++.h> //#define int long long ...

青烟绕指柔的博客 448

飞牛NAS 0day漏洞导致断网?完整的排查修复方案来了(含一键检测修复工具)

家里网络莫名断网,折腾十来天才发现是NAS被0day漏洞利用了?🔍 本文详细记录了从发现问题到最终解决的全过程,包括如何自查系统是否被入侵、使用检测脚本和专杀脚本进行修复,以及如何通过端口管理、访问控制、监控预警等措施加固系统安全 🔒,帮助遇到同样问题的用户快速排查和解决NAS安全风险 ✅

XiaoqiangClub的博客 5519

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

第一次发BZOJ的题解,先从水题开始吧,好不容易找到一道水题,那就从这题开始吧。 1.题设部分{ 题目描述: 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间? Sample Input...

weixin_30664615的博客 178

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【暖*墟】#三分法# 求单峰函数极值

【三分法】1. 对于任意一个上凸函数,选取函数上任意两个点A,B(xA&lt;xB),若满足yA&lt;yB,那么该函数的极值点必然在[xA,+∞)中,若满足yA&gt;yB,那么该函数极值点必然在(-∞,xB]中,若满足yA=yB,那么该函数的极值点必然在[xA,xB]中。2. 对于任意一个下凸函数,选取函数上任意两个点A,B(xA&lt;xB),若满足yA&lt;yB,那么该函数的极值点必然在...

flora715的博客 1669

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

三分套三分,挺神奇的。。。每次找到,每个传送带的上下两个三等分点,下面那个小,则一定有更优的在中间。 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #define eps 1e-3 5 using namespace std; 6 int ...

weixin_30852451的博客 163

【BZOJ1857】传送带(三分)

【BZOJ1857】传送带(三分) 题面 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间 Input 输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行...

weixin_30727835的博客 131

BZOJ 1857: [Scoi2010]传送带

二次联通门 :BZOJ 1857: [Scoi2010]传送带 /* BZOJ 1857: [Scoi2010]传送带 三分套三分 可能是吧。。dalao们都说明显是一个单峰函数 可是我证不出来。。 三分第一个线段,和第二个线段 */ #include <cstdio> #includ...

weixin_30909575的博客 79

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

【BZOJ1857】[Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间 Input 输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx...

weixin_30376163的博客 79

数学:三分法

这里给出一个例题BZOJ1857,题意是这样的: 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间 根据肯定知道最终的路径是一个这样形状的 关键就在于确定E和F点的位置 确定的时候控制变量...

weixin_30328063的博客 273

BZOJ1857 Scoi2010 传送带 【三分】

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

weixin_30919919的博客 84

未完成

[BZOJ1857][SCOI2010]传送带-[三分] https://www.cnblogs.com/coco-night/p/9538359.html [BZOJ1565][NOI2009]植物大战僵尸https://www.cnblogs.com/coco-night/p/9622909.html 期望dp大包子玩游戏http://192.168.102.138/JudgeO...

diancao3075的博客 132

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

【题目链接】 好像是比较经典的题了。 第一次在考场上写三分orz。 /* Telekinetic Forest Guard */ #include #include #include #include #include using namespace std; typedef double DB; const DB eps = 1e-6; struct po {

BraketBN 658
上一篇: [bzoj3932][主席树]任务查询系统
下一篇: [bzoj5196][Usaco2018 Feb][DP]Taming the Herd
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值