HDU 5144 NPY and shot 三分(物理)


HDU 5144
题意:站在高度为h的平面上,以初速度v[0]以某个角度扔球,问最远能仍到的位置? h,v<=1e4.

知道角度就能知道水平位置.显然角度过大或者过小 水平距离都不会太远,三分最优角度即可.

#include <bits/stdc++.h>
using namespace std;
const int N=2e2+5;
const double pi=acos(-1.0),g=9.8,eps=1e-8;
double calc(double h0,double v,double ang)
{
    double vx=v*cos(ang),vy=v*sin(ang);
    double t=vy/g;
    double s=vx*t;
    double h=h0*1.0+0.5*g*t*t;
    t=sqrt(2.0*h/g);
    s+=t*vx;
    return s;
}
int main()
{
    int T;
    double h,v;
    cin>>T;
    while(T--)
    {
        cin>>h>>v;
        double l=0,r=pi/2.0;
        while(l+eps<r)
        {
            double m1=(l+r)/2.0,m2=(m1+r)/2.0;
            if(calc(h,v,m1)>calc(h,v,m2))
                r=m2;
            else
                l=m1;
        }
        printf("%.2lf\n",calc(h,v,l));
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值