题意:
有A点和B点,都x<0,此时A点要跑到x>0的范围。给你B、A两点的速度之比。
B在追赶A,问你A能不能逃离。
POINT:
首先想到枚举A点逃离的位置,即Y轴上的所有点。然后算出A点和B点到这个点的距离之比。
在和速度之比相比较。就可以知道是否追上。
但是实数点是不能枚举的。
列出式子可知。
仅讨论B在A点左边的情况:dis(B,X)/dis(A,X) 在(0,+∞)=1 在(0,-∞)=1。
在(0,0)上>1。 所以是个先增后减的式子。
符合三分。
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <math.h>
const double eps=1e-9;
double xa,ya,xb,yb,k;
double cal(double y)
{
double lena=sqrt(xa*xa+(ya-y)*(ya-y));
double lenb=sqrt(xb*xb+(yb-y)*(yb-y));
return lenb/lena;
}
double triserch(double l,double r)
{
while(r-l>eps){
// double mid = (r+l)/2;
// double mmid=(mid+r)/2;
double mid=l+(r-l)/3.0;
double mmid=r-(r-l)/3.0;
if(cal(mid)>cal(mmid))
r=mmid;
else
l=mid;
}
return cal(l);
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%lf%lf%lf%lf%lf",&xa,&ya,&xb,&yb,&k);
if(k<1.0){
printf("N\n");
continue;
}
double t=triserch(-1000000, 1000000);
if(t>=k){
printf("N\n");
}else
printf("Y\n");
}
return 0;
}