传送带(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 ...
随机推荐
- OI,我的决心
虽然从初一就开始NOIP,但沉溺于游戏编程等各种乱七八糟的技术,一直没对算法有过透彻的研究. ——————————简单的来说就是水过了—————————— 我生于一个弱省,就读于一所弱校(我们全区的都 ...
- Java 技术栈
JAVA是一个面向对象的编程语言,由SUN公司的程序员所开发.它不仅吸收了C++的各种优点,而且还撇弃了C++中难以理解的概念,如多继承.指针等:因此JAVA语言具有功能强大且简单易用两个特征, JA ...
- 正则表达式-基础知识Review
正则表达式(Regular Expression)是计算机科学的一个概念. 正则表达式使用单个字符窜来描述.匹配一系列符合某个句法规则的字符窜. 在很多文本编辑器里, 正则表达式通常用来被检索替换哪些 ...
- python 3 在工作中的应用
Python 3在工作中的使用 安装配置Python 3 在notepad++中配置Python 3 使用sql server数据库 操作Excel 发送email python 3 使用日志 安 ...
- bootmem_free_node
该函数设置: 1.pgdata节点的成员 2.pgdata->zone的成员 3.初始化zone->free_area 4.初始化zone所包含的所有页对应的页框描述符page结构体 /* ...
- Spring---环境搭建与包介绍
jar包下载路径 首先需要下载Spring框架 spring-framework-5.0.0.RELEASE-dist,官方地址为https://repo.spring.io/release/org/ ...
- OpenCV学习笔记(九) 重映射、仿射变换
重映射 通过重映射来表达每个像素的位置 : 这里 是目标图像, 是源图像, 是作用于 的映射方法函数.想象一下我们有一个图像 , 我们想满足下面的条件作重映射:,图像会按照 轴方向发生翻 ...
- poj2631 Roads in the North(求树的直径)
Roads in the North Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2941 Accepted: 144 ...
- nsfwjs鉴黄识别最小化案例
3个月前,也就是2月份左右吧,Github上出现一个开源项目: Infinite Red, Inc.工作室宣布开源旗下基于tensorflow的tfjs的鉴黄小工具 据说是从15000张图片中 进行机 ...
- 【3Sum】cpp
题目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find al ...