首页 > 代码库 > bzoj1857: [Scoi2010]传送带

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 100100 0 100 1002 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

Day2

[Submit][Status][Discuss]

bzoj1857: [Scoi2010]传送带