• acm课程练习2--1005


    题目描述

    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代码

    1. #include <iostream>
    2. #include <stdio.h>
    3. #include <math.h>
    4. using namespace std;
    5. double pi = acos(-1.0);
    6. double x,y,l,w,s,h;
    7. double cal(double a)
    8. {
    9. s = l*cos(a)+w*sin(a)-x;
    10. h = s*tan(a)+w*cos(a);
    11. return h;
    12. }
    13. int main()
    14. {
    15. double left,right,mid,midmid;
    16. while(scanf("%lf%lf%lf%lf",&x,&y,&l,&w)!=EOF)
    17. {
    18. left = 0.0;
    19. right = pi/2;
    20. while(fabs(right-left)>1e-8)
    21. {
    22. mid = (left+right)/2;
    23. midmid = (mid+right)/2;
    24. if(cal(mid)>=cal(midmid))right = midmid;
    25. else left = mid;
    26. }
    27. if(cal(mid)<=y)printf("yes ");
    28. else printf("no ");
    29. }
    30. return 0;
    31. }//三分法程序

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





  • 相关阅读:
    C#后台正则表达式
    Layer 弹出层抖动问题
    JS中子页面父页面方法 变量相互调用
    layer最大话.最小化.还原回调方法
    trove远程连接mongodb
    tar.gz tar.bz2的解压命令
    IO测试工具之fio详解
    HTTP请求方法
    jmeter --使用put方法上传文件
    DHCP的原理和实现过程
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/5427799.html
Copyright © 2020-2023  润新知