求助,只有10分
查看原帖
求助,只有10分
201971
william_zy楼主2022/12/3 20:32

WA10

#include<bits/stdc++.h>
using namespace std;
double ax,ay,bx,by,cx,cy,dx,dy,p,q,r;
const double eps=1e-9;
double dist(double xx,double xy,double yx,double yy){
	return sqrt((yx-xx)*(yx-xx)+(yy-xy)*(yy-xy));
}
double calc(double x,double k){//在AB上的分比AX:AB=x      在CD上的分比CY:CD=k  计算用时
	double ans=0.0;
	double px1,py1,px2,py2;
	px1=ax+(bx-ax)*x;
	py1=ay+(by-ay)*x;
	px2=cx+(dx-cx)*k;
	py2=cy+(dy-cy)*k;
	return dist(ax,ay,px1,py1)/p+dist(px1,py1,px2,py2)/r
	+dist(px2,py2,cx,cy)/q;
}
double check(double x){//在AB上的分比AX:AB=x
	double L=0,R=1.0;
	while(L+eps<R){//三分在CD上的分比CY:CD
		double m1=L+(R-L)/3;
		double m2=R-(R-L)/3;
		if(calc(x,m1)<=calc(x,m2))R=m2;//计算
		else L=m1;
	}
	return calc(x,L);
}
int main(){
	scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy,&dx,&dy,&p,&q,&r);
	double L=0.0,R=1.0;
	while(L+eps<R){//三分在AB上的分比AX:AB
		double m1=L+(R-L)/3;
		double m2=R-(R-L)/3;
		if(check(m1)<=check(m2)) R=m2;
		else L=m1;//L和R都是局部变量不会互相影响
	}
	printf("%.2lf\n",check(L));
}
2022/12/3 20:32
加载中...