//在单调函数中,我们经常用二分法来快速搜索可行解。在单峰函数中,我们则要用三分法来搜索函数的极值。 一般来说,三分法可以平均分,也可以第一个点分在左右端点的中点,第二个点分在中点和右端点的中点。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <cmath>
using namespace std;
double h,v;
double f(double a)
{
double g=9.8,vx=v*cos(a),vy=v*sin(a);
return vx*(vy/g+sqrt((2*h*g+vy*vy)/(g*g)));
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lf%lf",&h,&v);
double l=0,r=90.00;
while((r-l)>=1e-10)
{
double ll,rr;
ll=(l+r)/2;
rr=(ll+r)/2;
if(f(ll)<f(rr))
l=ll;
else
r=rr;
}
printf("%.2lf\n",f(l));
}
return 0;
}
时间: 2024-11-09 00:55:05