HDU 5144
题意:站在高度为h的平面上,以初速度v[0]以某个角度扔球,问最远能仍到的位置? h,v<=1e4.
知道角度就能知道水平位置.显然角度过大或者过小 水平距离都不会太远,三分最优角度即可.
#include <bits/stdc++.h>
using namespace std;
const int N=2e2+5;
const double pi=acos(-1.0),g=9.8,eps=1e-8;
double calc(double h0,double v,double ang)
{
double vx=v*cos(ang),vy=v*sin(ang);
double t=vy/g;
double s=vx*t;
double h=h0*1.0+0.5*g*t*t;
t=sqrt(2.0*h/g);
s+=t*vx;
return s;
}
int main()
{
int T;
double h,v;
cin>>T;
while(T--)
{
cin>>h>>v;
double l=0,r=pi/2.0;
while(l+eps<r)
{
double m1=(l+r)/2.0,m2=(m1+r)/2.0;
if(calc(h,v,m1)>calc(h,v,m2))
r=m2;
else
l=m1;
}
printf("%.2lf\n",calc(h,v,l));
}
return 0;
}