bzoj1857传送带——三分法

2024-02-04 11:58

本文主要是介绍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


我们先假设我们在AB上已经选定了一个定点x,那么剩下的任务就是在CD上选一点y,使得AxyD最短,非常显然,再CD上选一个y绝对是一个单峰函数。于是我们可以用三分法求出这个函数的最小值,也就是说对于每一个x,我们可以求出y点。那么我们怎么着x使得y最优呢?
可以证明,x也是一个单峰函数(网上有证明,然而我并不是特别会证),于是我们可以用三分求出x的最优值,所以我们可以三分套三分,先三分一层x,然后再三分y求最优值即可。
#include<bits/stdc++.h>
#define db double
#define eps 1e-8
using namespace std;
int read(){char c;int x;while(c=getchar(),c<'0'||c>'9');x=c-'0';while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0';return x;
} 
int ax,ay,bx,by,cx,cy,dx,dy,p,q,r;
db lx,rx,ly,ry,lxm,rxm,lym,rym,t1,t2;
db dis(db x1,db y1,db x2,db y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
db calc(db x,db y){db lx=cx,ly=cy,rx=dx,ry=dy;db lxm,lym,rxm,rym,t1,t2;while(fabs(rx-lx)>eps||fabs(ry-ly)>eps){lxm=lx+(rx-lx)/3;lym=ly+(ry-ly)/3;rxm=rx+(lx-rx)/3;rym=ry+(ly-ry)/3;t1=dis(ax,ay,x,y)/p+dis(x,y,lxm,lym)/r+dis(lxm,lym,dx,dy)/q;t2=dis(ax,ay,x,y)/p+dis(x,y,rxm,rym)/r+dis(rxm,rym,dx,dy)/q;if(t1>t2) lx=lxm,ly=lym;else rx=rxm,ry=rym;}return dis(ax,ay,x,y)/p+dis(x,y,lx,ly)/r+dis(lx,ly,dx,dy)/q;
}
int main()
{ax=read();ay=read();bx=read();by=read();cx=read();cy=read();dx=read();dy=read();p=read();q=read();r=read();lx=ax;ly=ay;rx=bx;ry=by;while(fabs(rx-lx)>eps||fabs(ry-ly)>eps){lxm=lx+(rx-lx)/3;lym=ly+(ry-ly)/3;rxm=rx+(lx-rx)/3;rym=ry+(ly-ry)/3;t1=calc(lxm,lym);t2=calc(rxm,rym);if(t1>t2) lx=lxm,ly=lym;else rx=rxm,ry=rym;}printf("%.2lf",calc(lx,ly));return 0;
}

这篇关于bzoj1857传送带——三分法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677410

相关文章

基于yolov5的煤矿传送带异物检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv5的煤矿传送带异物检测系统是一种高效、智能的监测解决方案,专为煤矿等复杂工业环境设计。该系统利用YOLOv5深度学习算法,结合现场摄像头,对煤矿传送带上的异物进行实时监测与识别。 YOLOv5以其出色的检测速度和准确性著称,通过将原始图像划分为多个网格,并在每个网格中预测可能的目标边界框,实现对传送带上大块煤、矸石、锚杆、槽钢等异物的快速识别。系统能够自动区分正常物

二分法三分法 - 模板

快速幂模板: int fun(int x, int n) //x^n{int pw = 1;while (n > 0) {if ((n % 2) == 1) // n & 1 等价于 (n % 2) == 1pw *= x;x *= x;n /= 2; // n >>= 1 等价于 n /= 2}return

Threejs绘制传送带

接下来会做一个MES场景下的数字孪生,所以开始做车间相关的模型,不过还是尽量少用建模,纯代码实现,因为一方面可以动态使用,可以调节长度和宽度等, 下面这节就做一个简单的传送带,这是所有车间都会有的, 首先添加一个场景,相机,灯光等。 initScene(){//初始化场景this.scene = new THREE.Scene();//创建场景const axesHelper = new T

BZOJ 1857 [Scoi2010]传送带 三分套三分

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

洛谷 P2571 [SCOI2010]传送带

原题: 题目描述 在一个 222 维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段 AB\text{AB}AB 和线段 CD\text{CD}CD。lxhgww 在 AB\text{AB}AB 上的移动速度为 PPP,在 CD\text{CD}CD 上的移动速度为 QQQ,在平面上的移动速度 RRR。现在 lxhgww 想从 A\text AA 点走到 D\text D

2023年电子产品设计及制作赛题(模拟工业传送带物品识别系统)

2023年电子产品设计及制作赛题(模拟工业传送带物品识别系统) 赛题部分: 赛题最后会上传到资源里。本人参加的是今年的智能电子产品设计制作,成绩不是很理想,国三,有一定经验,可以分享。 功能介绍: 静态识别模式:电视机上以静止图片方式,连续播放 3 幅图片,每幅图片 停留 10 秒;低速识别模式:电视机上以低速(3~10cm/s)播放连续视频,播放 15s;电视机上以高速(10~30cm/

二分法、三分法

//http://acm.hdu.edu.cn/showproblem.php?pid=2675//Equation Again/*题目等价于 x^y = y^xln(x)/x = ln(y)/y所以 x和y是f(z) = ln(z)/z函数取某个值时的不同的z的两个自变量再打一下表 汇出f(z)的图像显然x=y(y>=e)是它的一个解,由图像还有一个是在1和e之间所以用二分法查找

三分法与五分法

刚刚总结一个无限化有限的分类方法,三分与五分。 同一类型不同级别。用三分法。比如:高、中、低。 凸出相反两种情况,用五分法。 比如:优、良、中、低、差 五分法其实也是三分法。 从中开始向左:中、良、优 从中开始向右:中、低、差 如果级别再更细一点,每个级别,再拆分三个级别。从三分变成九分。

51单片机项目(19)——基于51单片机的传送带产品计数器

1.功能描述         应用背景:         某生产线的传送带上不断地有产品单向传送,传送时会通过光电传感器产生方波信号,将该信号(可以采用方波发生器来模拟该信号)直接传送给51单片机,利用计数器0计量产品(方波信号)的个数,利用.定时器1产生2分钟的定时。 使用两个按键(按犍1.按键2)控制计数器0和定时器1的计数/定时过程,使用数码管、LED分别显示相关状态和结果。

基于PLC的物料分拣控制传送带控制系统设计

wx供重浩:创享日记 对话框发送:物料分拣 获取完整论文报告+PLC梯形图+工程源文件 传送带在先进制造领域中扮演着极其重要的角色。它可以搬运货物、分拣物品、代替人的繁重劳动。可以实现生产的机械化和自动化,能在有害环境下操作以保护人身安全,因此被广泛应用于机械制造、冶金、电子、轻工和原子能等部门。 本文在纵观了近年来传送带发展状况的基础上,结合传送带方面的设计,对传送带技术进行了系统