HDU 2438 Turn the corner 三分

题意:给一些几何数据,问车能不能过去。


想法:

由图可知,只要先确定y0=Y,那么可以求得x0然后比较x0和-Y的大小,如果x0大于-Y,表示可以通过这个角度。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define pi acos(-1.0)
#define eps 1e-9
using namespace std;
double x,y,l,w;
double aabs(double a)
{
	if(a>0) return a;
	return -a;
}
double cal(double mid)
{
	double y0=(x-l*sin(mid)-w/cos(mid))/tan(mid);
	return y0;
}
int main()
{
	while(cin>>x>>y>>l>>w)
	{
		if(x<w||y<w) 
		{
			printf("no\n");
			continue;
		}
		double lft=0,rht=pi/2;
		while(rht-lft>eps)
		{
			double mid=(lft+rht)/2;
			double midd=(mid+rht)/2;
			if(cal(mid)<cal(midd))
			{
				rht=midd;
			}
			else lft=mid;
		}
		if(cal(lft)>-y) printf("yes\n");
		else printf("no\n");
	}
	return 0;
}

你可能感兴趣的:(HDU 2438 Turn the corner 三分)