【BZOJ1857】传送带(分治经典:三分套三分)
大致题意: 一个二维平面上有两条传送带\(AB\)和\(CD\),\(AB\)传送带的移动速度为\(P\),\(CD\)传送带的移动速度为\(Q\),步行速度为\(R\),问你从\(A\)点到\(D\)点所需的最短时间。
什么是最优策略?
很显然,最优策略一定是在\(AB\)传送带上移动到某一个地方,然后步行到\(CD\)传送带的某一个地方,最后直接在\(CD\)传送带上移动到\(D\)。
三分套三分
不难发现,这是两个单谷函数,因此,我们可以对在\(AB\)传送带上移动的距离和\(CD\)传送带上移动的距离分别三分,然后合在一起,就变成了三分套三分,这样就能求出答案了。
代码
#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define LL long long
#define swap(x,y) (x^=y,y^=x,x^=y)
using namespace std;
double Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,p,q,r,ans;
inline double check(double x,double y)//求出这种方案所需的时间
{
double P1x=Ax+(Bx-Ax)*x,P1y=Ay+(By-Ay)*x,P2x=Cx+(Dx-Cx)*y,P2y=Cy+(Dy-Cy)*y;//P1为在AB传送带上移动到的点,P2为开始在CD传送带上移动的点
return sqrt((P1x-Ax)*(P1x-Ax)+(P1y-Ay)*(P1y-Ay))/p+sqrt((Dx-P2x)*(Dx-P2x)+(Dy-P2y)*(Dy-P2y))/q+sqrt((P2x-P1x)*(P2x-P1x)+(P2y-P1y)*(P2y-P1y))/r;//计算出A到P1、P1到P2、P2到D分别所需的时间
}
inline double find2(double l,double r,double t1)//第2个三分,t1表示在AB传送带上移动的距离占AB传送带总长度的多少,l和r表示在CD传送带上移动的距离占CD传送带总长度的多少
{
double res=0.0;
while(r-l>=1e-6)
{
double mid1=l+(r-l)/3,mid2=l+(r-l)/3*2,res1=check(t1,mid1),res2=check(t1,mid2);
if(res1<res2) res=res1,r=mid2;
else res=res2,l=mid1;
}
return res;
}
inline void find1(double l,double r)//第1个三分,l和r表示在AB传送带上移动的距离占AB传送带总长度的多少
{
while(r-l>=1e-6)
{
double mid1=l+(r-l)/3,mid2=l+(r-l)/3*2,res1=find2(0,1,mid1),res2=find2(0,1,mid2);
if(res1<res2) ans=res1,r=mid2;
else ans=res2,l=mid1;
}
}
int main()
{
return scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&Ax,&Ay,&Bx,&By,&Cx,&Cy,&Dx,&Dy,&p,&q,&r),find1(0,1),printf("%.2lf",ans),0;//三分套三分即可求出答案
}
【BZOJ1857】传送带(分治经典:三分套三分)的更多相关文章
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
[BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...
- 【BZOJ-1857】传送带 三分套三分
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1077 Solved: 575[Submit][Status][ ...
- 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- BZOJ 1857 传送带 (三分套三分)
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...
- [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】
题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
- loj10017. 「一本通 1.2 练习 4」传送带(三分套三分)
题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
- Bzoj 1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- #10017 传送带(SCOI 2010)(三分套三分)
[题目描述] 在一个 2 维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段 AB 和线段 CD.lxhgww 在 AB上的移动速度为 P ,在 CD 上的移动速度为 Q,在平 ...
随机推荐
- 51nod1118(递推)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 题意: 中文题诶~ 思路: 因为机器人只能往下或者右 ...
- HDU1272-小希迷宫
题目链接:点击打开链接 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首 ...
- sqllocaldb 的使用记录
sql脚本是一个文件大约也就几MB,要是有一种文件存储数据就好了,后来了解到了sqllocaldb,但是没有深入研究大概知道有这么一个东西.这次翻出来还是自家小姑姑要做winfrom但是苦于sqlse ...
- Codeforces Round #467(Div2)题解
凌晨起来打CF,0:05,也是我第一次codeforces 第一题: 我刚开始怀疑自己读错题了,怎么会辣么水. 判除了0的数字种类 #include <cstdio> ; ]; int m ...
- Migrations中的更新语句写法,摘要
public override void Up() { AlterColumn("dbo.Dispositions", "Property1", c => ...
- 为什么要问Servlet的初始化时间
Servlet的init方法到底是在什么时候调用的? j2ee specification和java doc中有以下说明 如果load-on-startup设置为>=0, 部署的时候就会调用. ...
- jquery——尺寸
1. 获取和设置元素的尺寸 2. 获取元素相对页面的绝对位置:offset() 这种方式增加的盒子不会对之前的结构产生影响 demo: <!DOCTYPE html> <html l ...
- Hadoop源生实用工具之distcp
1 概览 DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具. 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成. 它把文件和目录的列 ...
- phpcms如何调用某一组图里的所有图片
{pc:get sql="select * from v9_picture_data where id = '$id'"} {loop $data $n $r} {loop str ...
- CentOS-7.5 解决ifconfig报错
1.报错信息:-bash: ifconfig: command not found 2.检查IP地址是否设置正常 ip addr 以上说明ip设置正常,如果没有获取到IP地址则设置一个即可,设置i ...