题意: 在高为
h
的位置以速度
解题思路: 刚开始写题时想过直接求公式,但是后来放弃了,你懂得。解法是直接三分抛出去的角 (0,π) 。求出极大解,但是要注意结束三分的条件刚开始我是小于 10−4 跳出,但是精度不够,要把条件改为 10−7 AC。
AC代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
#define ll long long
double h,v;
double f(double j)
{
double vc=v*sin(j);
double vp=v*cos(j);
double tv=sqrt(2.0*9.8*h+vc*vc);
double t=(vc+tv)/9.8;
return t*vp;
}
int main()
{
double leftt,rightt,mid1,mid2;
int T;
scanf("%d",&T);
while(T--)
{
leftt=0;
rightt=3.1415926/2.0;
scanf("%lf%lf",&h,&v);
if(h<=0&&v<=0)
{
printf("0.00\n");
continue;
}
while(fabs(leftt - rightt)>0.0000001)
///三分注意跳出条件
{
mid1=(leftt+rightt)/2;
mid2=(mid1+rightt)/2;
if (f(mid1)>=f(mid2))
rightt=mid2;
else
leftt=mid1;
}
printf("%.2lf\n",f(leftt));
}
return 0;
}