hdu 5142 物理三分算法

来源:互联网 发布:淘宝卖家规则 编辑:程序博客网 时间:2024/06/14 09:34

题意: 在高为h的位置以速度v抛出一物体,求在最优角度抛出的最远水平距离。

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

AC代码:

#include <iostream>#include <stdio.h>#include <cmath>#include <algorithm>#include <cstring>#include <map>using namespace std;#define ll long longdouble 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;}
0 0
原创粉丝点击