Turn the corner
http://acm.hdu.edu.cn/showproblem.php?pid=2438
题目:一辆车能否在一个路口拐弯,看图就很明白啦。
算法:见下图,只要求出图中明黄色线段的最大值小于y就可以了。一图抵千言。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 double x,y,l,d; 5 6 double f_angle(double angle) 7 { 8 return l*cos(angle)+d/sin(angle)-x/tan(angle); 9 } 10 11 int main() 12 { 13 double mid1,mid2,low,high; 14 while(cin>>x>>y>>l>>d) 15 { 16 low=0.0; 17 high=acos(-1.0)/2; 18 while(high-low>=1.0e-6) 19 { 20 //三分法求极值 21 mid1=low+(high-low)/3.0; 22 mid2=high-(high-low)/3.0; 23 if(f_angle(mid1)<=f_angle(mid2)) 24 low=mid1; 25 else 26 high=mid2; 27 } 28 if(f_angle(low)<y) 29 cout<<"yes"<<endl; 30 else 31 cout<<"no"<<endl; 32 } 33 return 0; 34 }
二分查找所面向的搜索序列的要求是:具有单调性(不一定严格单调);
与二分查找不同的是,三分法所面向的搜索序列的要求是:序列为一个凸性函数(包括上凸和下凸)。