您的位置:首页 > 其它

hdu 5142 物理三分算法

2016-08-08 22:16 183 查看
题意: 在高为h的位置以速度v抛出一物体,求在最优角度抛出的最远水平距离。

解题思路: 刚开始写题时想过直接求公式,但是后来放弃了,你懂得。解法是直接三分抛出去的角(0,π)。求出极大解,但是要注意结束三分的条件刚开始我是小于10−4跳出,但是精度不够,要把条件改为10−7AC。

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--)
{

4000
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu 三分算法 acm