bzoj1857: [Scoi2010]传送带

三分套三分。。。其实直接看代码理解就可以了。

发现的新bug:(x,y,a,b)/p 这样的c++语句是合法的,我也不知道为什么,然后因为这一个我调了一节晚自修。。。药丸药丸!

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cmath>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
	int x=0,f=1;char c=getchar();
	while(!isdigit(c)) {
		if(c=='-') f=-1;c=getchar();
	}
	while(isdigit(c)) x=x*10+c-'0',c=getchar();
	return x*f;
}
const int inf=0x7f7f7f7f;
const double eps=1e-3;
double au,av,bu,bv,cu,cv,du,dv;
double p,q,r;
double dis(double a,double b,double x,double y){
	return sqrt((x-a)*(x-a)+(y-b)*(y-b));
}
double cal(double a,double b){
	double la=cu,lb=cv,ra=du,rb=dv,xa,ya,xb,yb,ta,tb,orz,tmp;
	while(fabs(ra-la)>eps||fabs(rb-lb)>eps){
		orz=(ra-la)/3;tmp=(rb-lb)/3;
		xa=orz+la,ya=tmp+lb;
		xb=orz*2+la,yb=tmp*2+lb;
		ta=dis(xa,ya,a,b)/r+dis(xa,ya,du,dv)/q;
		tb=dis(xb,yb,a,b)/r+dis(xb,yb,du,dv)/q;
		if(ta>tb) la=xa,lb=ya;
		else ra=xb,rb=yb;
	}
	return dis(au,av,a,b)/p+dis(la,lb,a,b)/r+dis(la,lb,du,dv)/q;
}
int main(){
	au=read(),av=read(),bu=read(),bv=read();
	cu=read(),cv=read(),du=read(),dv=read();
	p=read(),q=read(),r=read();
	double la=au,lb=av,ra=bu,rb=bv,xa,ya,xb,yb,ta,tb,orz,tmp;
	while(fabs(ra-la)>eps||fabs(rb-lb)>eps){
		orz=(ra-la)/3;tmp=(rb-lb)/3;
		xa=orz+la,ya=tmp+lb;
		xb=orz*2+la,yb=tmp*2+lb;
		ta=cal(xa,ya);tb=cal(xb,yb);
		if(ta>tb) la=xa,lb=ya;
		else ra=xb,rb=yb;
	}
	printf("%.2lf\n",cal(la,lb));
	return 0;
}
/*
0 0 0 100
100 0 100 100
2 2 1
*/

  

1857: [Scoi2010]传送带

Time Limit: 1 Sec  Memory Limit: 64 MB
Submit: 1191  Solved: 642
[Submit][Status][Discuss]

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

Source

[Submit][Status][Discuss]
posted @ 2016-09-23 20:17  BBChq  阅读(143)  评论(0编辑  收藏  举报