zoukankan      html  css  js  c++  java
  • 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. }//三分法程序

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





  • 相关阅读:
    Razor里写函数
    Tuple
    javascript下将字符类型转换成布尔值
    如何成为一名快枪手
    easyUI datagrid 前端假分页
    操作JSON对象
    服务器端将复合json对象传回前端
    将JSON对象转换成IList,好用linq
    操作系统学习笔记三 进程
    如何遍历newtonsoft.json的JObject里的JSON数据
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/5427799.html
Copyright © 2011-2022 走看看