传送带(bzoj 1857)
Description
Input
Output
Sample Input
100 0 100 100
2 2 1
Sample Output
HINT
对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10
/*
路线可以分为三部分:在AB上的,CD上的,还有在平面上的。
可以三分AB上的断点和CD上的断点。
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#define eps 1e-9
using namespace std;
double ax,ay,bx,by,cx,cy,dx,dy,P,Q,R,ans;
double calc(double x1,double y1,double x2,double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
double sa2(double x,double y){//CD无斜率
double m1,m2,k,t1,t2,l,r;
l=min(cy,dy),r=max(cy,dy);
while(l+eps<r){
m1=(*l+r)/,m2=(l+*r)/;
t1=calc(cx,m1,dx,dy)/Q+calc(cx,m1,x,y)/R;
t2=calc(cx,m2,dx,dy)/Q+calc(cx,m2,x,y)/R;
if(t1<t2) r=m2;
else l=m1;
}
t1=calc(cx,l,dx,dy)/Q+calc(cx,l,x,y)/R;
return t1;
}
double sanfen2(double x,double y){//CD有斜率
if(cx==dx) return sa2(x,y);
double m1,m2,k,t1,t2,l,r,b;
l=min(cx,dx),r=max(cx,dx);
k=(cy-dy)/(cx-dx);
b=cy-k*cx;
while(l+eps<r){
m1=(*l+r)/,m2=(l+*r)/;
t1=calc(m1,m1*k+b,dx,dy)/Q+calc(m1,m1*k+b,x,y)/R;
t2=calc(m2,m2*k+b,dx,dy)/Q+calc(m2,m2*k+b,x,y)/R;
if(t1<t2) r=m2;
else l=m1;
}
t1=calc(l,l*k+b,dx,dy)/Q+calc(l,l*k+b,x,y)/R;
return t1;
}
void sanfen1(){//AB有斜率
double m1,m2,k,t1,t2,l,r,b;
l=min(ax,bx),r=max(ax,bx);
k=(ay-by)/(ax-bx);
b=ay-k*ax;
while(l+eps<r){
m1=(*l+r)/,m2=(l+*r)/;
t1=sanfen2(m1,k*m1+b)+calc(m1,m1*k+b,ax,ay)/P;
t2=sanfen2(m2,m2*k+b)+calc(m2,m2*k+b,ax,ay)/P;
if(t1<t2) r=m2;
else l=m1;
}
t1=sanfen2(l,l*k+b)+calc(l,l*k+b,ax,ay)/P;
ans=min(ans,t1);
}
void sa1(){//AB无斜率.
double m1,m2,k,t1,t2,l,r;
l=min(ay,by),r=max(ay,by);
while(l+eps<r){
m1=(*l+r)/,m2=(l+*r)/;
t1=sanfen2(ax,m1)+calc(ax,m1,ax,ay)/P;
t2=sanfen2(ax,m2)+calc(ax,m2,ax,ay)/P;
if(t1<t2) r=m2;
else l=m1;
}
t1=sanfen2(ax,l)+calc(ax,l,ax,ay)/P;
ans=min(ans,t1);
}
int main(){
cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy;
cin>>P>>Q>>R;
ans=calc(ax,ay,dx,dy)/R;
if(ax!=bx) sanfen1();
else sa1();
printf("%.2lf",ans);
return ;
}
传送带(bzoj 1857)的更多相关文章
- BZOJ 1857: [Scoi2010]传送带
二次联通门 : BZOJ 1857: [Scoi2010]传送带 /* BZOJ 1857: [Scoi2010]传送带 三分套三分 可能是吧..dalao们都说明显是一个单峰函数 可是我证不出来.. ...
- [BZOJ 1857] 传送带
Link: BZOJ 1857 传送门 Solution: 首先中间的两个拐点$C,D$肯定都在传送带$A,B$上 接下来感性发现固定点A/C,另一个点C/D时间随位置的变化为单峰函数 这样就是三分套 ...
- bzoj 1857: [Scoi2010]传送带 三分
题目链接 1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 934 Solved: 501[Submit][Stat ...
- Bzoj 1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- BZOJ 1857 传送带 (三分套三分)
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...
- BZOJ 1857: [Scoi2010]传送带(三分套三分)
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2549 Solved: 1370 [Submit][Status][Discuss] Descriptio ...
- 【BZOJ 1857】【SCOI 2010】传送带
三分套三分,虽然简单,但是也得掌握,,, 时间复杂度$O(log_{1.5}^2 n)$ 一开始WA好几次发现是快速读入里没有return,这样也能过样例?_(:3J∠)_ #include<c ...
- bzoj 1857
三分,对于单凸的函数(单调的也可以),可以找出最值. 这道题可以感性认识一下...... /****************************************************** ...
- bzoj 1857 三分套三分
题目大意 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
随机推荐
- pycahrm git配置笔记
1. 在file - setting - plugins 中查看是否有github插件, 此处是用于处理插件位置
- 列举Asp.net页面之间传递值的几种方式和优缺点?
一.QueryString变量 优点:使用简单,对于安全性要求不高时传递数字或是文本值非常有效. 缺点:缺乏安全性,由于它的值暴露在浏览器的URL地址中的:不能传递对象. 二. 使用Applicati ...
- Python9-MySQL-Homework-day43
表结构 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure f ...
- 单片机入门学习笔记6:新唐单片机N76E003
学习新唐单片机是从2018年3月开始的,之前一点也不懂这一块单片机,之后脉络变的越来越清晰. 由于N76E003档次太低,新塘科技官方的管脚配置,芯片选型……都没有这一块芯片,资料唯独只有:芯片的数据 ...
- python之格式化
python有两种方式可以格式化一种是用%s,一种使用format(2.6)进入的,从下面的代码可以看出,效果差不多. name = 'edward' age = 27 print("My ...
- TS各个表 与 SECTION 的解析 CAS原理
TS流,通过一个个的TS包来传送: TS包可以是传送PSI SI等各表的数据包,也可以是传送节目音视频数据(携带的PES包:音视频基本流包)的包:TS携带 PSI SI等表的数据时,各个表以各表对应的 ...
- IntentService和Service执行子线程对比
1.为何要用子程序 服务是在主线程中执行的,直接在服务中执行耗时操作明显不可取,于是安卓官方增加了IntentService类来方便使用 在Service中执行子程序代码如下 @Override pu ...
- cf965e Short Code
ref #include <algorithm> #include <iostream> #include <cstring> #include <cstdi ...
- 最简单的RSA及其几个网站和工具
最简单的形式 给你公钥和一个密文. flag.enc就是密文,我们用记事本是看不出什么的,其实也不用看,因为后边的解密是直接用脚本读取文件的,只需要知道这是密文. pub.pem就是公钥,用记事本打开 ...
- day05_10 作业
bug1.0版本 #购物车程序 salary = int(input("请输入你的工资")) item = ['iphone6s','macbook','coffee','pyth ...