HDU 3400 Line belt (三分套三分)
http://acm.split.hdu.edu.cn/showproblem.php?pid=3400
题意:
有两条带子ab和cd,在ab上的速度为p,在cd上的速度为q,在其它地方的速度为r。现在计算从a出发到达d的最少花费时间。
思路:
分别在ab和cd两段线路上找一个转折点,然后就是由这三段路组成。
设ab上的线路长度为x,cd上的为y,其余为z。
那么总的时间就是
,分开来考虑,
,F(x)是个单调递增函数,G(y,z)是个凹性函数。
那么总的T函数还是一个凹性函数,那么就可以三分了,对ab进行一次三分,然后继续对cd进行三分。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = +; const double eps=1e-; struct node
{
double x,y;
}a,b,c,d; double p,q,r; double getdis(node t1, node t2)
{
return sqrt((t2.y-t1.y)*(t2.y-t1.y)+(t2.x-t1.x)*(t2.x-t1.x));
} double solve_cd(node ab)
{
node mid, midd;
node t1=c,t2=d;
double d1,d2;
do
{
mid.x=(t1.x+t2.x)/;
mid.y=(t1.y+t2.y)/;
midd.x=(mid.x+t2.x)/;
midd.y=(mid.y+t2.y)/;
d1=getdis(mid,ab)/r+getdis(d,mid)/q;
d2=getdis(midd,ab)/r+getdis(d,midd)/q;
if(d1<d2) t2=midd;
else t1=mid;
}while(getdis(t1,t2)>=eps);
return min(d1,d2);
} double solve_ab()
{
node mid, midd;
node t1=a,t2=b;
double ans1,ans2;
do
{
mid.x=(t1.x+t2.x)/;
mid.y=(t1.y+t2.y)/;
midd.x=(mid.x+t2.x)/;
midd.y=(mid.y+t2.y)/;
double d1=getdis(mid,a);
double d2=getdis(midd,a);
ans1=d1/p+solve_cd(mid);
ans2=d2/p+solve_cd(midd);
if(ans1<ans2) t2=midd;
else t1=mid;
}while(getdis(t1,t2)>=eps);
return min(ans1,ans2);
} int main()
{
//freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
scanf("%lf%lf%lf",&p,&q,&r);
printf("%.2f\n",solve_ab());
}
return ;
}
HDU 3400 Line belt (三分套三分)的更多相关文章
- HDU 3400 Line belt (三分再三分)
HDU 3400 Line belt (三分再三分) ACM 题目地址: pid=3400" target="_blank" style="color:rgb ...
- 三分套三分 --- HDU 3400 Line belt
Line belt Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3400 Mean: 给出两条平行的线段AB, CD,然后一 ...
- HDU 3400 Line belt (三分嵌套)
题目链接 Line belt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 搜索(三分):HDU 3400 Line belt
Line belt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 3400 Line belt【三分套三分】
从A出发到D,必定有从AB某个点E出发,从某个点F进入CD 故有E,F两个不确定的值. 在AB上行走的时间 f = AE / p 在其他区域行走的时间 g = EF / r 在CD上行走的时间 ...
- hdu 3400 Line belt 三分法
思路:要求最短时间从A到D,则走的路线一定是AB上的一段,CD上的一段,AB与CD之间的一段. 那么可以先三分得到AB上的一个点,在由这个点三分CD!! 代码如下: #include<iostr ...
- hdu 3400 Line belt
题意:给你两条线段AB,CD:然后给你在AB,CD上的速度P,Q,在其它部分的速度是R,然后求A到D的最短时间. 思路:用三分枚举从AB线段上离开的点,然后再用三分枚举在CD的上的点找到最优点,求距离 ...
- BZOJ 1857 传送带 (三分套三分)
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...
- 【BZOJ-1857】传送带 三分套三分
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1077 Solved: 575[Submit][Status][ ...
随机推荐
- 设计模式之Strategy(策略)(转)
Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲 ...
- ATM-JAVA程序 //程序有5处相同错误,找不出原因 转账功能没有实现,修改密码来不及实现了
package JCC;//信1705-3 20173681 靳晨晨import java.io.BufferedReader;import java.io.File;import java.io.F ...
- mac电脑使用,开发环境配置指南
mac电脑使用,开发环境配置指南 前端工具链,mac下都很好用 用brew来装软件 用brew cask来装应用 Introduction · macOS Setup Guidehttp://sour ...
- [转载]dbms_lob用法小结
http://blog.sina.com.cn/s/blog_713978a50100prkt.html CLOB里存的是2进制 判定长度 DBMS_LOB.GETLENGTH(col1)获取文本 ...
- Django框架----Object Relational Mapping(ORM)
Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...
- gradle 定义打包后的项目名
war { archiveName 'ROOT.war' } 或 task makeWar(type:org.gradle.api.tasks.bundling.War) { //指定生成的jar名 ...
- (Linux)动态度的编写
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一 ...
- yocto doc
Yocto Project Overview and Concepts Manual https://www.yoctoproject.org/docs/2.6.1/overview-manual/o ...
- 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲(转)
源: 四轴飞行器1.7 NRF24L01P无线通讯和改进型环形缓冲
- Eloquent JavaScript #01# values
When action grows unprofitable, gather information; when information grows unprofitable, sleep. ...