130407周赛 (四)

2014-11-24 03:12:45 · 作者: · 浏览: 13
{
r = midd;
}
}
printf("%.3f %.3f\n",h,rr);
}
}
1008 Turn the corner

三分角度,求出最大的过弯y,最后比较判断。

一开始很sb的直接把角度带进三角函数里计算。。。忘了化成pi


[cpp]
double cal(double n ,double x ,double l ,double d)
{
double xx,yy,c,s;
s = sin(n);
c = cos(n);
xx = -1 * (d / s + c * l) ;
yy = ( d / c + s * l ) ;
double tmp = ( 1.0 - x / yy ) * xx * (-1);
return tmp;
}
int main()
{
double l ,d , x , y ;
while(cin >> x >> y >> l >> d)
{
double low = 0 , high = 90.0 ;
double ans = 0 ;
while( high - low > 1e-8)
{
double mid = (low + high) / 2 ;
double midd = (low + mid ) / 2 ;
double amid = cal(mid * PI / 180,x,l,d);
double amidd = cal(midd * PI / 180,x,l,d);
ans = max(ans,max(amid,amidd));
if(amid > amidd)
{
low = midd;
}
else
high = mid ;
}
if(ans > y)
cout <<"no"< else
cout <<"yes"< }
}

double cal(double n ,double x ,double l ,double d)
{
double xx,yy,c,s;
s = sin(n);
c = cos(n);
xx = -1 * (d / s + c * l) ;
yy = ( d / c + s * l ) ;
double tmp = ( 1.0 - x / yy ) * xx * (-1);
return tmp;
}
int main()
{
double l ,d , x , y ;
while(cin >> x >> y >> l >> d)
{
double low = 0 , high = 90.0 ;
double ans = 0 ;
while( high - low > 1e-8)
{
double mid = (low + high) / 2 ;
double midd = (low + mid ) / 2 ;
double amid = cal(mid * PI / 180,x,l,d);
double amidd = cal(midd * PI / 180,x,l,d);
ans = max(ans,max(amid,amidd));
if(amid > amidd)
{
low = midd;
}
else
high = mid ;
}
if(ans > y)
cout <<"no"< else
cout <<"yes"< }
}