Problem Description Mr. West bought a new car! So he is travelling around the city.
One day he comes to a vertical corner. The street he is currently in has a width x, the street he wants to turn to has a width y. The car has a length l and a width d.
Can Mr. West go across the corner? 
分析:汽车能否顺利转弯取决于在极限情况下,随着角度的变化,汽车离对面路的距离是否大于等于0
如图中

在上图中需要计算转弯过程中h 的最大值是否小于等于y很明显,随着角度θ的增大,最大高度h先增长后减小,即为凸性函数,可以用三分法来求解
#include <iostream>
#include<math.h>
using namespace std;
//x,y表示道路的宽度
//l,w表示汽车长度和宽度
double x,y,l,w;
//定义PI,360度
const double PI = 3.141592653;
double cal(double ag){
      //推出的汽车拐弯时所需要的最小高度公式
      double s = l * cos(ag) + w * sin(ag) - x;
      double h = s * tan(ag) + w * cos(ag);
      return h;
}
int main()
{
      while(cin >> x >> y >> l >> w){
            //变量从0度到180度
            double left = 0.0,right = PI/2;
            double lm,rm;
            //通过三分求出凸点
            while((right-left) > 10e-6){
                 /*
                  //不懂
                  lm = (left * 2.0 + right)/3.0;
                  rm = (left + right * 2.0)/3.0;
                  */
                  //常规三分
                      lm = (left + right)/2.0;
                      rm = (lm + right)/2.0;
                  if(cal(lm) > cal(rm)){
                        right = rm;
                  }
                  else{
                        left = lm;
                  }
            }
            if(cal(left) <= y){
                  cout << "yes" << endl;
            }
            else{
                  cout << "no" << endl;
             }
      }
      return 0;
}
参考了别人的三分代码,不过没有搞懂,最后用的自己的常规三分。不过效果是一样的
原文:http://www.cnblogs.com/2016zhanggang/p/5424131.html