分析:主要参考http://m.blog.csdn.net/blog/yinzm520/22721285这里的解题方法。
#include<iostream> #include<cmath> using namespace std; double fx(double l,double x,double d,double angle) { return l*sin(angle)-x*tan(angle)+d/cos(angle); } #define PI 3.141592654 #define esp 1e-8 int main() { double x,y,l,w; double low,up,mid1,mid2,midv1,midv2; ios::sync_with_stdio(false); while(cin>>x>>y>>l>>w) { low=0; up=PI/2; //区间[0,PI/2]相当于旋转了90度 while(up-low>=esp) //三分找出最大值 { mid1=low+(up-low)/3; mid2=up-(up-low)/3; midv1=fx(l,x,w,mid1); midv2=fx(l,x,w,mid2); if(midv1<midv2) low=mid1; else up=mid2; } if(y-midv1>esp) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }
HDU ACM 2438 ->Turn the corner 三分求最值
原文地址:http://blog.csdn.net/a809146548/article/details/45601463