这道题的=是在网上看了一个大牛的图示做出来的
连接:http://hi.baidu.com/novosbirsk/blog/item/534df74f50e21b3eafc3ab22.html#0
自己重新画了下图,第一次画,好挫,掩面。。。
PH=f(a) 是个先增后减的函数 只要在(0,pi/2)内三分找到PH的最大值,如果该最大值不超过Y,那么车子就可以通过
#include <stdio.h>
#include <math.h>
const double pi=acos(-1.0),eps=1e-6;
double x,y,l,d;
double f(double a)
{
return l*cos(a)+d/sin(a)-x/tan(a);
}
double ts()
{
double l=eps,r=pi/2,mid,midmid;
while(r-l>eps)
{
mid=(l+r)/2.0;
midmid=(mid+r)/2.0;
double cmid=f(mid);
double cmidmid=f(midmid);
if(cmid>cmidmid)
r=midmid;
else
l=mid;
}
return l;
}
int main()
{
while (scanf("%lf%lf%lf%lf",&x,&y,&l,&d)!=EOF)
{
if (y<d || x<d || f(ts())>y)
printf("no\n");
else
printf("yes\n");
}
return 0;
}