您的位置:首页 > 其它

hdu2438

2015-07-11 21:59 260 查看
汽车的左边尽量贴着那个直角点,而汽车的右下后方的点尽量贴着最下面的边。

以O点为原点建立直角坐标系,以角a给出P点横坐标的函数F(a)

F(a)= l*cos(a)+(d-x*cos(a))/sin(a);

经求导可证是凸函数,三分查找

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
const double eps=1e-8;
double x,y,l,w;
double equ(double t)
{
return l*cos(t)+(w-x*cos(t))/sin(t);
}
double ternarysearch(double l,double r)
{
while(r-l>eps)
{
double L=(l+l+r)/3;
double R=(l+r+r)/3;
double ans1=equ(L);
double ans2=equ(R);
if(ans1<ans2)
l=L;
else
r=R;
}
return l;
}
int main()
{while(cin>>x>>y>>l>>w)
{
double low=0,high=acos(-1.0)/2;
double tmp=ternarysearch(low,high);
if(equ(tmp)<=y)
puts("yes");
else
puts("no");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: