三分70求助
查看原帖
三分70求助
92553
亚索s楼主2023/10/12 21:48
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
double dis(double x,double y,double x1,double y1)
{
	return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
 } 
double xa,ya,xb,yb,xc,yc,xd,yd,p,q,r;
double s(double x,double y)
{
	if(xc==xd&&yc==yd) return dis(x,y,xd,yd)/r;
	double lx=xc,ly=yc,rx=xd,ry=yd;
    while(dis(lx,ly,rx,ry)>eps)
    {
    	double lmidx=lx+(rx-lx)/3,lmidy=ly+(ry-ly)/3,rmidx=rx-(rx-lx)/3,rmidy=ry-(ry-ly)/3;
    	double ansl=dis(x,y,lmidx,lmidy)/r+dis(lmidx,lmidy,xd,yd)/q,ansr=dis(x,y,rmidx,rmidy)/r+dis(rmidx,rmidy,xd,yd)/q;
    	if(ansl-ansr>eps) lx=lmidx,ly=lmidy;
    	else rx=rmidx,ry=rmidy;
	}
	return dis(x,y,lx,ly)/r+dis(lx,ly,xd,yd)/q;
}
int main()
{
	cin>>xa>>ya>>xb>>yb>>xc>>yc>>xd>>yd>>p>>q>>r;
	double lx=xa,ly=ya,rx=xb,ry=yb;
	do
	{
		if(xa==xb&&ya==yb)
		{
			lx=xa,ly=ya;
			break;
		}
		double lmidx=lx+(rx-lx)/3,lmidy=ly+(ry-ly)/3,rmidx=rx-(rx-lx)/3,rmidy=ry-(ry-ly)/3;
		double ansl,ansr;
		ansl=s(lmidx,lmidy)+dis(xa,ya,lx,ly)/p,ansr=s(rmidx,rmidy)+dis(xa,ya,rx,ry)/p;
		if(ansl-ansr>eps) lx=lmidx,ly=lmidy;
		else rx=rmidx,ry=rmidy;
	}while(dis(lx,ly,rx,ry)>eps);
	printf("%.2lf\n",dis(xa,ya,lx,ly)/p+s(lx,ly));
	return 0;
 } 
2023/10/12 21:48
加载中...