您的位置:首页 > 其它

acm课程练习2--1005

2016-04-24 19:08 134 查看

题目描述

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?

Input

Every line has four real numbers, x, y, l and w.
Proceed to the end of file.

Output

If he can go across the corner, print “yes”. Print “no” otherwise.

Sample Input

10 6 13.5 4
10 6 14.5 4


Sample Output

yes
no


大意

求长为l,宽为w的汽车能否通过前后道路宽度依次为x与y的90度直角弯道

思考

很明显,这是一道数学题,公式的推导过程很是麻烦,我也是参考了题解才推导出正确的公式,主要参考了这篇博客

这是一个凸性函数,因此我用了三分搜素法来做

AC代码

#include <iostream>

#include <stdio.h>

#include <math.h>

using namespace std;

double pi = acos(-1.0);

double x,y,l,w,s,h;

double cal(double a)

{

s = l*cos(a)+w*sin(a)-x;

h = s*tan(a)+w*cos(a);

return h;

}

int main()

{

double left,right,mid,midmid;

while(scanf("%lf%lf%lf%lf",&x,&y,&l,&w)!=EOF)

{

left = 0.0;

right = pi/2;

while(fabs(right-left)>1e-8)

    {

mid = (left+right)/2;

midmid = (mid+right)/2;

if(cal(mid)>=cal(midmid))right = midmid;

else left = mid;

}

if(cal(mid)<=y)printf("yes\n");

else printf("no\n");

}

return 0;

}//三分法程序

[/code]

做这道题好像做高中的数学题(不过好难)。。。。

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: