【BZOJ1857】【SCOI2010】传送带 [三分]
传送带
Time Limit: 1 Sec Memory Limit: 64 MB
[Submit][Status][Discuss]
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
Main idea
给定平面上的两条线段AB,CD,在AB,CD上移动会有一个特别的速度,在平面上移动会有一个速度,求从点A到点D的最短时间。
Solution
首先发现坐标范围-1000~1000,并且精度要求不高,从此基础上思考。我们先考虑从AB上一个定点O到CD上的距离,发现其中从O到CD的距离是先减小再增大的,我们大胆猜测这道题的答案满足单峰性。然后我们可以用三分(效率为O(log1.5(n)))来实现。
我们现在可以求出一个定点求CD的最短时间,这里用三分实现。然后怎么办呢?
由于AB也是一条线段,我们大胆猜测,可以再在AB上三分一个点,这样就是三分套三分,最后发现其正确性可以证明。
三分方法(这里给出求最小值的方法):在区间1/3处和2/3处各取两个点l,r,如果左段(即L~l)的答案比右段(r~R)的更优,那么由于单峰性(图像类似一个抛物线)可以抹去右段,多次操作使得答案最优。
Code
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<cstdlib> 6 #include<cmath> 7 #include<queue> 8 using namespace std; 9 10 const int ONE=1005; 11 const int MOD=19650827; 12 13 int n; 14 15 struct power 16 { 17 double x,y; 18 double AB,CD,PM; 19 friend power operator +(power a,power b) {a.x=a.x+b.x; a.y=a.y+b.y; return a;} 20 friend power operator -(power a,power b) {a.x=a.x-b.x; a.y=a.y-b.y; return a;} 21 22 }; 23 power A,B,C,D,v; 24 power l1,l2,r1,r2; 25 power a,b; 26 power pass; 27 28 int get() 29 { 30 int res,Q=1; char c; 31 while( (c=getchar())<48 || c>57) 32 if(c=='-')Q=-1; 33 if(Q) res=c-48; 34 while((c=getchar())>=48 && c<=57) 35 res=res*10+c-48; 36 return res*Q; 37 } 38 39 double dist(power a,power b) 40 { 41 return (double)sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y)); 42 } 43 44 double Getdist(power E,power F) 45 { 46 return dist(A,E)/v.AB + dist(E,F)/v.PM + dist(F,D)/v.CD; 47 } 48 49 double Trivide(power O) 50 { 51 power l=C,r=D,pass,a,b; 52 while(dist(l,r)>0.001) 53 { 54 pass.x=(r.x-l.x)/3.0; pass.y=(r.y-l.y)/3.0; 55 a=l+pass; b=r-pass; 56 if(Getdist(O,a) < Getdist(O,b)) r=b; 57 else l=a; 58 } 59 return Getdist(O,l); 60 } 61 62 int main() 63 { 64 scanf("%lf %lf %lf %lf",&A.x,&A.y,&B.x,&B.y); 65 scanf("%lf %lf %lf %lf",&C.x,&C.y,&D.x,&D.y); 66 scanf("%lf %lf %lf",&v.AB,&v.CD,&v.PM); 67 68 power l=A,r=B; 69 while(dist(l,r)>0.001) 70 { 71 pass.x=(r.x-l.x)/3.0; pass.y=(r.y-l.y)/3.0; 72 a=l+pass; b=r-pass; 73 if(Trivide(a) < Trivide(b)) r=b; 74 else l=a; 75 } 76 77 printf("%.2lf",Trivide(l)); 78 }
View Code
转载于:https://www.cnblogs.com/BearChild/p/6441257.html
【BZOJ1857】【SCOI2010】传送带 [三分]相关推荐
- BZOJ1857 Scoi2010 传送带 【三分】
BZOJ1857 Scoi2010 传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P ...
- [BZOJ1857][Scoi2010]传送带
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1786 Solved: 981 [Submit][Status ...
- bzoj1857 [Scoi2010]传送带
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1635 Solved: 909 [Submit][Status ...
- P2571 [SCOI2010]传送带
P2571 [SCOI2010]传送带 题意: 你要从 A 点到 D 点.有两条传送带:第一条从 A 到 B,速度为 pp,第二条从 C 到 D,速度为 q.不走传送带时速度为 r.求从 A 到 D ...
- BZOJ1857:[SCOI2010]传送带——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1857 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送 ...
- #10017 「一本通 1.2 练习 4」传送带+三分套三分
题目描述 原题来自:SCOI 2010 在一个 2 维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段 AB和线段CD .lxhgww 在 AB上的移动速度为 P ,在 ...
- [SCOI2010]传送带
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...
- 退役前的做题记录2.0
退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
最新文章
- React SPA学习(一)
- Office365-----Skype for business
- 深度学习训练的小技巧,调参经验。总结与记录。
- python列表的append和extend
- 2010.7.27 OnDraw与OnPaint有什么区别
- 提高物联网安全性的简单方法
- 【youcans 的 OpenCV 例程 200 篇】107. 退化图像的维纳滤波
- 超级好用的坐标转换软件
- 【笔记】汇编..寄存器和地址的概述
- java 软件分析_优化、分析Java源代码的11款软件工具
- 如何共享OneNote笔记本
- Android仿人人客户端(v5.7.1)——有关滑动式左侧菜单实现过程中网友的疑问解答
- Robot Framework+Autoit 安装教程
- HDU 1241 Oil Deposits(石油储藏)
- 电脑视频转换成mp4格式,视频格式转换器转换
- international journal of remote sensing投稿经历给我的感悟
- fiddle无法抓包小程序解答
- 营销费用的预算管理原则和模式
- JZOJ Day4 B组 T3【五校联考1day1】我才不是萝莉控呢
- 单片机,51红外通信代码,详细注释【普中科技】【350行】【原创】
热门文章
- mysql主从架构升级_实战项目——mysql主从架构的实现
- linux里hba状态_Windows和Linux系统查看HBA卡wwn号的方法 | 系统之家官网
- JavaScript学习随记——Function
- 深入Java核心 Java内存分配原理精讲
- 模拟退火算法解决np_P和NP问题与解决方案| 演算法
- java uuid静态方法_Java UUID timestamp()方法与示例
- array_chunk_PHP array_chunk()函数与示例
- 栈-顺序表(代码、分析、汇编)
- php 命令链模式,设计模式之------命令链模式
- 埃拉托斯特尼筛法 快速查找素数