Turn the corner(三分)

来源:互联网 发布:淘宝限时折扣 编辑:程序博客网 时间:2024/06/14 03:38

题目链接:点击打开链接

题目大意:求能否拐弯;



思路:可以当一条边的宽度已知,求另一条路的最短宽度;

(在其他的人的博客中找的图,画着太麻烦了)


这样可以求出,任意角度下,所需要的y最小值;

让h与y做对比,找h的最小值时,要用到三分来查找;

代码:

#include<stdio.h>#include<string.h>#include<math.h>#define pi asin(1.0)double x,y,l,w;double cal(double a)//在不同角度下,求出的h值;{    double s=l*cos(a)+w*sin(a)-x;    double h=s*tan(a)+w*cos(a);    return h;}int main(){    while(~scanf("%lf%lf%lf%lf",&x,&y,&l,&w))    {        double left=0.0,right=pi;        while(fabs(left-right)>1e-8)        {            double la=(left*2.0+right)/3.0;            double lb=(left+2.0*right)/3.0;            if(cal(la)>cal(lb))//不断逼近最小值;                right=lb;            else                 left=la;        }        if(cal(left)<=y)            printf("yes\n");        else printf("no\n");    }    return 0;}

第一次使用三分,刚开始觉得二分有什么区别,后来发现,三分是用来求最值的(处理曲线,例如二次方程一类的),而二分是用来查找一个数的(例如一条直线上的一个数)。



0 0
原创粉丝点击