HDU 2438 三分

这道题的=是在网上看了一个大牛的图示做出来的

 

连接:http://hi.baidu.com/novosbirsk/blog/item/534df74f50e21b3eafc3ab22.html#0

 

自己重新画了下图,第一次画,好挫,掩面。。。

 

 

PH=f(a) 是个先增后减的函数  只要在(0,pi/2)内三分找到PH的最大值,如果该最大值不超过Y,那么车子就可以通过

 

 #include <stdio.h>
 #include <math.h>
 const double pi=acos(-1.0),eps=1e-6;
 double x,y,l,d;
 double f(double a)
 {
     return l*cos(a)+d/sin(a)-x/tan(a);
 }
double ts()
{
   double l=eps,r=pi/2,mid,midmid;
   while(r-l>eps)
   {
      mid=(l+r)/2.0;
      midmid=(mid+r)/2.0;
      double cmid=f(mid);
      double cmidmid=f(midmid);
      if(cmid>cmidmid)
      r=midmid;
      else
      l=mid;
   }
   return l;
}
 int main()
 {
     while (scanf("%lf%lf%lf%lf",&x,&y,&l,&d)!=EOF)
     {
         if (y<d || x<d || f(ts())>y)
         printf("no\n");
         else 
         printf("yes\n");
     }
     return 0;
 }


 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值