首页 > 代码库 > bzoj1857 [Scoi2010]传送带
bzoj1857 [Scoi2010]传送带
Description
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间
Input
输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy 第三行是3个整数,分别是P,Q,R
Output
输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位
Sample Input
0 0 0 100
100 0 100 100
2 2 1
100 0 100 100
2 2 1
Sample Output
136.60
HINT
对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10
正解:三分套三分。
第一次正经地打三分。。以前只在考试中为了压常数而写了个三分$CDQ$分治。。
比较显然的思路。。外面三分从$AB$中哪个点出去,里面三分从$CD$中哪个点进来,然后就是个单峰函数,判断一下就行了。
1 //It is made by wfj_2048~ 2 #include <algorithm> 3 #include <iostream> 4 #include <complex> 5 #include <cstring> 6 #include <cstdlib> 7 #include <cstdio> 8 #include <vector> 9 #include <cmath>10 #include <queue>11 #include <stack>12 #include <map>13 #include <set>14 #define inf (1<<30)15 #define eps (1e-3)16 #define il inline17 #define RG register18 #define ld long double19 #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)20 21 using namespace std;22 23 ld ax,ay,bx,by,cx,cy,dx,dy,p,q,r;24 25 il ld gettime(RG ld x1,RG ld y1,RG ld x2,RG ld y2,RG ld v){26 return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/v;27 }28 29 il ld calc(RG ld x,RG ld y){30 RG ld lx=cx,ly=cy,rx=dx,ry=dy,x1,y1,x2,y2,t1,t2;31 while (fabs(rx-lx)>eps || fabs(ry-ly)>eps){32 x1=lx+(rx-lx)/3,y1=ly+(ry-ly)/3;33 x2=x1+(rx-lx)/3,y2=y1+(ry-ly)/3;34 t1=gettime(x,y,x1,y1,r)+gettime(x1,y1,dx,dy,q);35 t2=gettime(x,y,x2,y2,r)+gettime(x2,y2,dx,dy,q);36 if (t1>t2) lx=x1,ly=y1; else rx=x2,ry=y2;37 }38 return gettime(ax,ay,x,y,p)+gettime(x,y,lx,ly,r)+gettime(lx,ly,dx,dy,q);39 }40 41 il void work(){42 cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy>>p>>q>>r;43 RG ld lx=ax,ly=ay,rx=bx,ry=by,x1,y1,x2,y2,t1,t2;44 while (fabs(rx-lx)>eps || fabs(ry-ly)>eps){45 x1=lx+(rx-lx)/3,y1=ly+(ry-ly)/3;46 x2=x1+(rx-lx)/3,y2=y1+(ry-ly)/3;47 if (calc(x1,y1)>calc(x2,y2)) lx=x1,ly=y1; else rx=x2,ry=y2;48 }49 printf("%0.2Lf\n",calc(lx,ly)); return;50 }51 52 int main(){53 File("belt");54 work();55 return 0;56 }
bzoj1857 [Scoi2010]传送带
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。