固定次数的三分,#4 #6 #7 WA:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
const double EPS=1e-4;
double P,Q,R;
struct Node{
double x,y;
bool operator<(const Node &K)const{
return x<K.x;
}
}A,B,C,D;
double Ds(Node a,Node b){//两点间距离公式
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
Node Md(Node a,Node b){//中点坐标公式
return (Node){(a.x+b.x)/2,(a.y+b.y)/2};
}
double Valid2(Node M,Node K){//计算总时间
return Ds(A,M)/P+Ds(D,K)/Q+Ds(M,K)/R;
}
double Valid1(Node M){//内层三分(CD段)[三分坐标]
Node l=C,r=D;
for(int i=1;i<=100;++i){
Node M1=Md(l,r),M2=Md(M1,r);
if(Valid2(M,M1)<Valid2(M,M2)) r=M2;
else l=M1;
}
return min(Valid2(M,l),Valid2(M,r));
}
double ThreeSeg1(void){//外层三分(AB段)[三分坐标]
Node l=A,r=B;
for(int i=1;i<=100;++i){
Node M1=Md(l,r),M2=Md(M1,r);
if(Valid1(M1)<Valid1(M2)) r=M2;
else l=M1;
}
return min(Valid1(l),Valid1(r));
}
int main(){
cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y>>P>>Q>>R;
if(B<A) swap(A,B);
if(D<C) swap(C,D);
cout<<fixed<<setprecision(2)<<ThreeSeg1();
return 0;
}