BZOJ1857:[SCOI2010]传送带——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=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一点E,CD一点F,则我们跑了AE+EF+FD。
考虑将其中一个点固定住,那么显然对于另一个点我们三分即可求出这个店的位置(显然该点有最小值,他的左右两点都比他大,所以为单峰函数)。
那么对于最开始的点,我们同样也是单峰函数,也可以三分(通过神奇的代数几何可以证明)
所以这题就是三分套三分。
PS:因为这题x1与x2可能相同,所以不能单独三分x或y,必须同时三分(不然代码量太大了)
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef double dl;
const int N=;
dl ax,ay,bx,by,cx,cy,dx,dy,P,Q,R;
inline dl dis(dl x,dl y,dl xx,dl yy){
return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
}
dl sff(dl x,dl y){
dl lx=cx,rx=dx,ly=cy,ry=dy;
dl lfx,lfy,rfx,rfy;
for(int i=;i<=N;i++){
lfx=(lx*+rx)/;lfy=(ly*+ry)/;
rfx=(lfx+rx)/;rfy=(lfy+ry)/;
dl t1=dis(lfx,lfy,dx,dy)/Q+dis(lfx,lfy,x,y)/R;
dl t2=dis(rfx,rfy,dx,dy)/Q+dis(rfx,rfy,x,y)/R;
if(t1<t2){
rx=rfx;ry=rfy;
}else{
lx=lfx;ly=lfy;
}
}
return dis(lx,ly,dx,dy)/Q+dis(lx,ly,x,y)/R+dis(x,y,ax,ay)/P;
}
dl sfe(dl lx,dl rx,dl ly,dl ry){
dl lex,ley,rex,rey;
for(int i=;i<=N;i++){
lex=(lx*+rx)/;ley=(ly*+ry)/;
rex=(lex+rx)/;rey=(ley+ry)/;
if(sff(lex,ley)<sff(rex,rey)){
rx=rex;ry=rey;
}else{
lx=lex;ly=ley;
}
}
return sff(lx,ly);
}
int main(){
cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy>>P>>Q>>R;
printf("%.2lf\n",sfe(ax,bx,ay,by));
return ;
}
BZOJ1857:[SCOI2010]传送带——题解的更多相关文章
- BZOJ1857 Scoi2010 传送带 【三分】
BZOJ1857 Scoi2010 传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P ...
- 2018.06.30 BZOJ1857: [Scoi2010]传送带(三分套三分)
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段 ...
- BZOJ1857 [Scoi2010]传送带 【三分法】
题目链接 BZOJ1857 题解 画画图就发现实际上是在\(AB\)上和\(CD\)上分别选两个点\(E\),\(F\),使得\(t_{AE} + t_{EF} + t_{FD}\)最小 然后猜想到当 ...
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- BZOJ1857[SCOI2010]传送带
题目大意:平面上两条线段,一个人从一条线段的一个点到另一条线段的一个点,最小时间是多少 路径肯定是在一条线段上走一段,然后走平面,最后再走另一条线段,那么需要确定的就是在两条线段上走的距离,其他暴力算 ...
- [BZOJ1857][SCOI2010]传送带-[三分]
Description 传送门 Solution 三分套三分.代码简单但是证明苦兮兮.. 假如我们在AB上选了一个点G,求到该点到D的最小时间. 图中b与CD垂直.设目前从G到D所耗时间最短的路径为G ...
- 洛谷 P2571 [SCOI2010]传送带 题解
每日一题 day51 打卡 Analysis 这道题是用非常恶心的三分套三分做的,有一个技巧是不要枚举坐标,枚举两条线段构成三角形的相似比就好了. 了解思路就还挺好写的(尽管我还调了三天) #incl ...
- P2571 [SCOI2010]传送带——hyl天梦
P2571 [SCOI2010]传送带题解----天梦 如写的不好,请多见谅. 对于这道题,我首先想说,确实困惑了我好久,看网上的各种题解,却都不尽人意,思路早已明白,却不会操作.最后想想,还是觉得自 ...
- 【BZOJ1857】[Scoi2010]传送带 三分套三分
[BZOJ1857][Scoi2010]传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度 ...
随机推荐
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- 「题目代码」P1060~P1065(Java)
P1060 谭浩强C语言(第三版)习题7.5 注意行末空格. import java.util.*; import java.io.*; import java.math.*; import java ...
- WEB安全基础之sql注入基础
1.基础sql语句 注释 单行注释# %23--+ --加空格多行注释/**/ SELECT(VERSION()) SELECT(USER()) SELECT(database()) 查数据库 SEL ...
- 180620-mysql之数据库导入导出
文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...
- 怎样下载Firefox与Chrome浏览器驱动
在浏览器地址栏输入https://www.seleniumhq.org/ 打开Selenium官网 下载Firefox浏览器驱动 解压到本地 下载Chrome浏览器驱动 解压到本地 把这2个驱动放到P ...
- vuex-Actions的用法
Action 类似于 mutation,不同在于: Action 提交的是 mutation,而不是直接变更状态. Action 是异步的,mutation是同步的. 沿用vuex学习---简介的案例 ...
- 数据库Mysql的学习(六)-子查询和多表操作
)*0.05 WHERE card_id ='20121xxxxxx'; //子查询就是一个嵌套先计算子查询 SELECT * FROM borrow WHERE book_id =(SELECT b ...
- 数据库Mysql的学习(三)-各种约束
删除数据库表 drop table [if exists] 表一,表二.....; 表分区:比如图书信息表有1000万个图书信息,如何优化他,其中一种方式就是表分区.就是把一张表的数据分成多个区块,这 ...
- ubuntu networking 与 network-manager
刚遇到的坑,因为操作不当导致网络中断,于是手动配置了/etc/network/interfaces , 修复了系统之后发现ubuntu-desktop中的有线链接不见了,百度了一下说是networki ...
- ubuntu server guide 学习笔记
1. 软件包 1.1. dpkg dpkg -l dpkg -l | grep apache2 dpkg -L ufw dpkg -S /etc/host.conf dpkg -i zip_3.0-4 ...