http://acm.hdu.edu.cn/showproblem.php?pid=5144
题意:给你初始的高度和速度,然后让你求出水平的最远距离。
思路:三分枚举角度,然后根据公式求出水平距离。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 const double pi=acos(-1.0); 7 const double eps=1e-6; 8 const double g=9.8; 9 10 int t;11 double h,v;12 double ok(double x)13 {14 double xx=((double)(x/180))*pi;15 double t1=v*sin(xx)/g;16 double y=v*t1*sin(xx)-0.5*g*t1*t1;17 double yy=y+h;18 double t2=sqrt(yy*2/g);19 double s=v*cos(xx)*(t1+t2);20 return s;21 }22 23 int main()24 {25 scanf("%d",&t);26 while(t--)27 {28 scanf("%lf%lf",&h,&v);29 double l=0,r=90;30 double c;31 while(r-l>eps)32 {33 double mid1=(r+l)/2;34 double mid2=(l+mid1)/2;35 if(ok(mid1)>=ok(mid2))36 {37 c=mid1;38 l=mid2;39 }40 else41 r=mid1;42 }43 printf("%.2lf\n",ok(c));44 }45 return 0;46 }