hdu Turn the corner
这题是道三分的题,首先要分析满足条件的情况,这个就是平面几何的功夫了。要想车子能够转弯成功,最上面那个点到水平线的距离要小于等于y。这里h和s的公式就是利用平面几何的知识求出来的:s=l*cos(a)+w*sin(a)-x;s=l*cos(a)+w*sin(a)-x;其中s为最右边的那个点到拐角处的水平距离。因为角度和高度h满足凸函数的关系,因此想到利用角度采用三分的方法进行求解。
#include"iostream" #include"stdio.h" #include"algorithm" #include"string.h" #include"cmath" #define exp 1e-8 #define pi acos(-1.0) using namespace std; double x,y,l,w; double cal(double a) { double s=l*cos(a)+w*sin(a)-x; double s=l*cos(a)+w*sin(a)-x; return h; } int main() { while(scanf("%lf%lf%lf%lf",&x,&y,&l,&w)==4) { double left=0; double right=pi/2;; double mid,midmid;//三分 while(abs(right-left)>exp) { mid=(right+left)/2; midmid=(mid+right)/2; if(cal(mid)>=cal(midmid)) right=midmid; else left=mid; } if(cal(mid)<=y) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }