zoukankan      html  css  js  c++  java
  • hdu 5144 NPY and shot 物理+三分

    NPY and shot

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)


    Problem Description
    NPY is going to have a PE test.One of the test subjects is throwing the shot.The height of NPY is H meters.He can throw the shot at the speed of v0 m/s and at the height of exactly H meters.He wonders if he throws the shot at the best angle,how far can he throw ?(The acceleration of gravity, g, is 9.8m/s2)
     
    Input
    The first line contains a integer T(T10000),which indicates the number of test cases.
    The next T lines,each contains 2 integers H(0h10000m),which means the height of NPY,and v0(0v010000m/s), which means the initial velocity.
     
    Output
    For each query,print a real number X that was rounded to 2 digits after decimal point in a separate line.X indicates the farthest distance he can throw.
     
    Sample Input
    2 0 1 1 2
     
    Sample Output
    0.10 0.99
    Hint
    If the height of NPY is 0,and he throws the shot at the 45° angle, he can throw farthest.
     
    Source
     
    题意:给你一个高度h,一个初始的速度v ;
       你选择一个角度扔使其最远;
    思路:三分抛出的角度;
       显然函数成一段凸的抛物线形状;
       代码有注释;
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define mk make_pair
    #define eps 1e-7
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=1e6+10,M=4e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=1e9+7;
    
    ///   数组大小
    
    double h,v;
    double equ(double x)
    {
        double G=9.8,vx=v*cos(x/180*pi),vy=v*sin(x/180*pi);
        double t=vy/G;//  到达最高点的时间
        t+=sqrt(2*G*h+vy*vy)/G; //到达顶端时间
        // 2*G*h+vy*vy为到达最下端的速度的平方
        return vx*t;
    }
    
    double ternarySearch(double l,double r)
    {
        while(r-l>eps)
        {
            double L=(2*l+r)/3;
            double R=(l+2*r)/3;
            double ans1=equ(L);
            double ans2=equ(R);
            if(ans1<ans2)
                l=L;
            else
                r=R;
        }
        return equ(l);
    }
    int main()
    {
        //cout<<sin(90.0/180*pi)<<endl;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lf%lf",&h,&v);
            double l=0,r=90.0;
            printf("%.2f
    ",ternarySearch(l,r));
        }
        return 0;
    }
  • 相关阅读:
    如何下载网络图片资源
    经典排序之快速排序(含红黑树)
    经典排序之归并排序
    node微信公众号开发---自动回复
    koa2的文件上传
    async await的用法
    Generator yield语法和 co模块
    CentOS 7 下安装 Nginx
    windows下nginx的安装及使用方法入门
    linux下nodejs安装以及如何更新到最新的版本
  • 原文地址:https://www.cnblogs.com/jhz033/p/6700967.html
Copyright © 2011-2022 走看看