BZOJ 1857: [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


Sample Output

136.60

HINT

对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
1<=P,Q,R<=10

题解

三分套三分。只要“三分”两条线段分别在哪里离开即可。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<algorithm>
#define eps 1e-12
using namespace std;
double P,Q,R;
struct dian {double x,y;} A,B,C,D;
void read(dian &a) {scanf("%lf%lf",&a.x,&a.y);}
double dis(dian &i,dian &j)
{
	return sqrt((i.x-j.x)*(i.x-j.x)+(i.y-j.y)*(i.y-j.y));
}
double calcu(double x,double y)
{
	dian E,F;
	E.x=x; E.y=y;
	double lx=C.x,ly=C.y,rx=D.x,ry=D.y;
	double m1x,m1y,m2x,m2y,t1,t2;
	while(fabs(rx-lx)>eps||fabs(ry-ly)>eps)
	   {m1x=lx+(rx-lx)/3; m1y=ly+(ry-ly)/3;
	    m2x=rx-(rx-lx)/3; m2y=ry-(ry-ly)/3;
	    F.x=m1x; F.y=m1y;
	    t1=dis(A,E)/P+dis(E,F)/R+dis(F,D)/Q;
	    F.x=m2x; F.y=m2y;
	    t2=dis(A,E)/P+dis(E,F)/R+dis(F,D)/Q;
	    if(t1>t2) {lx=m1x;ly=m1y;}
	    else {rx=m2x;ry=m2y;}
	   }
	F.x=lx; F.y=ly;
    return dis(A,E)/P+dis(E,F)/R+dis(F,D)/Q;
}
int main()
{
	read(A); read(B); read(C); read(D);
	scanf("%lf%lf%lf",&P,&Q,&R);
	double lx=A.x,ly=A.y,rx=B.x,ry=B.y;
	double m1x,m1y,m2x,m2y,s1,s2;
	while(fabs(rx-lx)>eps||fabs(ry-ly)>eps)
	   {m1x=lx+(rx-lx)/3; m1y=ly+(ry-ly)/3;
	    m2x=rx-(rx-lx)/3; m2y=ry-(ry-ly)/3;
	    s1=calcu(m1x,m1y); s2=calcu(m2x,m2y);
	    if(s1>s2) {lx=m1x; ly=m1y;}
	    else {rx=m2x; ry=m2y;}
	   }
	printf("%.2lf",calcu(lx,ly));
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值