【SCOI2010】【JZOJ4692】传送带

2023-10-25 03:09
文章标签 scoi2010 传送带 jzoj4692

本文主要是介绍【SCOI2010】【JZOJ4692】传送带,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

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

Solution

这题我们先假设在AB线段确定了一个点 (x,y) ,那么 (x,y) 到CD线段的一个点 (x,y) 的距离加上 (x,y) 到D点的时间显然是呈一个二次函数。于是我们可以在AB线段上枚举一个点,三分CD上的点,然后取最优即可。

但是,这样可能会超时,我们考虑点A到 (x,y) 的时间随着距离增大而增大,这说明这里的函数是一条直线,那么显然 (x,y) 也可以三分出来。这样时间复杂度是 O(log23L) L <script type="math/tex" id="MathJax-Element-8">L</script>是线段最长距离),所以是很快的。

Code

请自重!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define eps 0.001
using namespace std;
double sqr(double x) {return x*x;}
double dis(double x,double y,double x1,double y1)
{return sqrt(sqr(x-x1)+sqr(y-y1));
}
double calc(double z1,double z2,double z3) {return z1*z3/z2;}
double ax,ay,bx,by;
double cx,cy,dx,dy;
int P,Q,R;
double ab,cd;
double val(double x,double y,double x1,double y1)
{return dis(ax,ay,x,y)/P+dis(x,y,x1,y1)/R+dis(dx,dy,x1,y1)/Q;
}
double sf(double x,double y)
{double l=0,r=dis(cx,cy,dx,dy);double tmp=2147483647;while(l+eps<r){double p;double lm=l+(r-l)/3;double rm=r-(r-l)/3;double lx,ly;p=calc(lm,cd,fabs(dx-cx));if(dx<cx) lx=cx-p;else lx=cx+p;p=calc(lm,cd,fabs(dy-cy));if(dy<cy) ly=cy-p;else ly=cy+p;double rx,ry;p=calc(rm,cd,fabs(dx-cx));if(dx<cx) rx=cx-p;else rx=cx+p;p=calc(rm,cd,fabs(dy-cy));if(dy<cy) ry=cy-p;else ry=cy+p;if(val(x,y,lx,ly)<val(x,y,rx,ry)) r=rm,tmp=val(x,y,lx,ly);else l=lm,tmp=val(x,y,rx,ry);}return tmp;
}
int main()
{cin>>ax>>ay>>bx>>by;ab=dis(ax,ay,bx,by);cin>>cx>>cy>>dx>>dy;cd=dis(cx,cy,dx,dy);cin>>P>>Q>>R;double ans=2147483647;double l=0,r=ab;if(ax==bx && ay==by) ans=sf(ax,ay);while(l+eps<r){double lm=l+(r-l)/3;double rm=r-(r-l)/3;double lx,ly;double p=calc(lm,ab,fabs(bx-ax));if(bx<ax) lx=ax-p;else lx=ax+p;p=calc(lm,ab,fabs(by-ay));if(by<ay) ly=ay-p;else ly=ay+p;double rx,ry;p=calc(rm,ab,fabs(bx-ax));if(bx<ax) rx=ax-p;else rx=ax+p;p=calc(rm,ab,fabs(by-ay));if(by<ay) ry=ay-p;else ry=ay+p;double t1=sf(lx,ly),t2=sf(rx,ry);if(t1<t2) ans=t1,r=rm;else ans=t2,l=lm; }printf("%.2lf",ans);
}

这篇关于【SCOI2010】【JZOJ4692】传送带的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

洛谷 P2569 [SCOI2010] 股票交易

题目来源于:洛谷 题目本质:动态规划,单调队列 解题思路: 方程f[i][j]表示第 i 天结束后,手里剩下 j 股的最大利润,则不买不卖:f[i][j]=f[i-1][j]。 买入:f[i][j]=max{f[i-w-1][k]+k*ap[i]}-ap[i]*j 卖出:f[i][j]=max{f[i-w-1][k]+k*bp[i]}-bp[i]*j 完整代码如下: #inclu

Threejs绘制传送带

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

BZOJ1855. [Scoi2010]股票交易(单调队列dp)

Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律。 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi,第i天的股票卖出价为每股BPi(数据保证对于每个i,都有APi>=BPi),但是每天不能无限制地交易,于是股票交易所规定第i天的一次买入至多只能购买ASi股,一次卖出至多只能卖出BSi股

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/

洛谷P2572 [SCOI2010] 序列操作

题目描述 lxhgww 最近收到了一个 01 序列,序列里面包含了 n 个数,下标从 0 开始。这些数要么是 0,要么是 1,现在对于这个序列有五种变换操作和询问操作: 0 l r 把 [l,r] 区间内的所有数全变成 0;1 l r 把 [l,r] 区间内的所有数全变成 1;2 l r 把 [l,r] 区间内的所有数全部取反,也就是说把所有的 0 变成 1,把所有的 1 变成 0;3 l r

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的坐标,分别为

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

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