1.1006
2.
1<br>0 0 0 100<br>100 0 100 100<br>2 2 1
136.60
3.在二维平面上有两线带,有两段AB和CD,lxhgww的速度对AB是P,在CD是Q,他用速度R在其他地区在平面上移动。多久他从A到D?
4.先三分AB上的点,再三分CD上的点
证明:
设E在AB上,F在CD上。
AB 时间:f = AE / p,
Z和Y 时间:g = EF / r + FD / q。
f单调递增,而g先递减后递增。
两个函数叠加,所得的函数先递减后递增,所以用三分法
5.#include<iostream>
#include<string.h>
#include<set>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<numeric>
#include<math.h>
#include<string.h>
#include<sstream>
#include<stdio.h>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<map>
#include<queue>
#include<iomanip>
#include<cstdio>
using namespace std;
struct point
{
double x,y;
};
int p,q,r,v;
double dis(point a,point b)
{
return pow(pow(a.y-b.y,2)+pow(a.x-b.x,2),1.0/2);
}
double findy(point c,point d,point y)
{
point mid,midmid,left,right;
double t1,t2;
left = c;
right = d;
do
{
mid.x = (left.x+right.x)/2;
mid.y = (left.y+right.y)/2;
midmid.x = (right.x+mid.x)/2;
midmid.y = (right.y+mid.y)/2;
t1 = dis(d,mid)/q+dis(mid,y)/r;
t2 = dis(d,midmid)/q+dis(midmid,y)/r;
if(t1>t2)
left = mid;
else right = midmid;
}while(fabs(t1-t2)>0.000001);
return t1;
}
double find(point a,point b,point c,point d)
{
point mid,midmid,left,right;
double t1,t2;
left = a;
right = b;
do
{
mid.x = (left.x+right.x)/2;
mid.y = (left.y+right.y)/2;
midmid.x = (right.x+mid.x)/2;
midmid.y = (right.y+mid.y)/2;
t1 = dis(a,mid)/p+findy(c,d,mid);
t2 = dis(a,midmid)/p+findy(c,d,midmid);
if(t1>t2)left = mid;
else right = midmid;
}while(fabs(t1-t2)>0.000001);
return t1;
}
int main()
{
int t;
point a,b,c,d;
cin>>t;
while(t--)
{
scanf("%lf%lf%lf%lf %lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
cin>>p>>q>>r;
printf("%.2f\n",find(a,b,c,d));
}
return 0;
}