zoukankan      html  css  js  c++  java
  • hdu2438 三分

    题意:
          给你个90度的转弯,和一辆标准矩形的车,问你这台车能不能拐过去..

    思路:


         求出靠近最里侧的那条边所在的直线(这个图形右下角为坐标原点) 
         y = x * tan(du) + l * sin(du) + d / cos(du);
         那么我们现在固定y = 题目中的那个 X则,根据(du)的不同,我们可以找到不同的x,
    只要-x或者x的绝对值最大的时候小于 题目中的 Y就行了,所以先求反函数
    x = y * tan(du) + l * sin(du) + d / cos(du)

    则 -y = (-x + l * sin(du) + d / cos(du)) / tan(du) 让他最大就行了,因为他是凸(凹)性的函数所以用三分找(凸(凹)性可以根据二次导数判断). 

    #include<stdio.h>
    #include<math.h>
    
    #define eps 1e-9
    
    double PI = acos(-1.0);
    double X ,Y ,L ,D;
    
    double Fun(double du)
    {
       return (-X + L * sin(du) + D / cos(du)) / tan(du);
    }
    
    bool solve()
    {
       if(X < D || Y < D) return 0;
       double low ,up ,mid ,mmid;
       double dis1 ,dis2;
       low = 0;
       up = PI / 2;
       while(1)
       {
          mid = (low + up) / 2;
          mmid = (mid + up) / 2;
          dis1 = Fun(mid);
          dis2 = Fun(mmid);
          if(dis1 > dis2) up = mmid;
          else low = mid;
          if(up - low < eps) break;
       }
       return dis1 <= Y;
    }
    
    int main ()
    {
       while(~scanf("%lf %lf %lf %lf" ,&X ,&Y ,&L ,&D))
       {
          solve()? printf("yes
    ") : printf("no
    ");
       }
       return 0;
    }
       
       
       
    

  • 相关阅读:
    Android 中的 Service 全面总结
    数据库事务
    ADB server didn't ACK
    Eclipse中10个最有用的快捷键组合
    IoC框架
    Wifi相关的操作
    Hibernate generator小结
    不朽的青春
    JSCPC 2020 摸鱼记
    CCPC 2020 秦皇岛站 H题
  • 原文地址:https://www.cnblogs.com/csnd/p/12063163.html
Copyright © 2011-2022 走看看