hdu2298(Steps 4.1.6)

/*
分析:
    物理题,一元二次方程。。。
    x=v0*cos(α)*t;
    y=v0*sin(α)-g*t*t/2;
    消t,得:g*x*x*tan(α)*tan(α)-2*v0*v0*tan(α)*x+g*x*x+2*v0*v0*y=0;
然后就知道a、b、c了,然后就解一元二次方程吧。。。
    也可以用二分。


                                          2013-03-19
*/










#include"iostream"
#include"cmath"
using namespace std;
const double g=9.8;
int main()
{
	int T;
	double x,y,v;
	double a,b,c,temp;
	double f1,f2;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%lf%lf%lf",&x,&y,&v);
		
		if(x==0 && y==0)	{printf("0.000000\n");continue;}
		temp=v/g;
		temp=1/2*g*temp*temp;
		if(x==0 && temp<y)	{printf("-1\n");continue;}
		if(x==0 && temp>=y)	{printf("90.000000\n");continue;}

		a=g*x*x;
		b=-2*x*v*v;
		c=g*x*x+2*y*v*v;
		temp=b*b-4*a*c;
		if(temp<0)	{printf("-1\n");continue;}

		f1=(-b+sqrt(temp))/2/a;
		f2=(-b-sqrt(temp))/2/a;
		if(f1>f2)
		{
			temp=f1;
			f1=f2;
			f2=temp;
		}
		if(f2<0)	{printf("-1\n");continue;}

		double ans;
		if(f1<0)	ans=atan(f2);
		else		ans=atan(f1);
		printf("%.6lf\n",ans);
	}
	return 0;
}


你可能感兴趣的:(hdu2298(Steps 4.1.6))