//#pragma GCC optimize (2)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const double dps=1e-8;
double ax,ay,bx,by,cx,cy,dx,dy,p,q,r,d1,d2;
inline double dist(double a,double b,double c,double d)
{
return sqrt((a-c)*(a-c)+(b-d)*(b-d));
}
inline double f2(double k1,double k2,double x,double y)
{
return dist(k1,k2,x,y)/r+dist(x,y,dx,dy)/q;
}
inline double f1(double k1,double k2)
{
double lx=cx,ly=cy,rx=dx,ry=dy;
while((dist(lx,ly,rx,ry))>=dps)
{
double deltax=(rx-lx)/3,deltay=(ry-ly)/3;
double lmx=lx+deltax,lmy=ly+deltay,rmx=rx-deltax,rmy=ry-deltay;
if(f2(k1,k2,lmx,lmy)-f2(k1,k2,rmx,rmy)<dps)rx=rmx,ry=rmy;
else lx=lmx,ly=lmy;
}
return f2(k1,k2,lx,ly);
}
signed main()
{
cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy>>p>>q>>r;
// printf("%0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf %0.2lf ",ax,ay,bx,by,cx,cy,dx,dy,p,q,r);
// d1=dist(ax,ay,bx,by);d2=dist(cx,cy,dx,dy);
double lx=ax,ly=ay,rx=bx,ry=ay,k;
while((dist(lx,ly,rx,ry))>=dps)
{
double deltax=(rx-lx)/3,deltay=(ry-ly)/3;
double lmx=lx+deltax,lmy=ly+deltay,rmx=rx-deltax,rmy=ry-deltay;
if(f1(lmx,lmy)+dist(ax,ay,lmx,lmy)/p-(f1(rmx,rmy)+dist(ax,ay,rmx,rmy)/p)<dps)rx=rmx,ry=rmy;
else lx=lmx,ly=lmy;
}
printf("%0.2lf\n",f1(lx,ly)+dist(ax,ay,lx,ly)/p);
return 0;
}
根据其他oj的数据,错误数据的两线段其中一个端点相同。
但我是真找不出来了QAQQQ