• HDU 5144 NPY and shot(物理运动学+三分查找)


    NPY and shot

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1035    Accepted Submission(s): 428

     
    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
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5144
    分析:做三分做上瘾了,再来一道,物理数学得学好啊,不然有些题就算算法知道你也写不来啊,都是思维题,典型的质点运动学+三分查找!
    下面给出AC代码:
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const double pi=acos(-1.0);
     4 const double g=9.8;
     5 double v,h;
     6 const double eps=1e-8;
     7 double ans(double a)
     8 {
     9     double a1=v*v*sin(a)*sin(a);
    10     double a2=2*g*h;
    11     a1=a1+a2;
    12     a1=sqrt(a1);
    13     a1=a1/g;
    14     a1=a1+v*sin(a)/g;
    15     a1=a1*v*cos(a);
    16     return a1;
    17 }
    18 int main()
    19 {
    20     int T;
    21     while(scanf("%d",&T)!=EOF)
    22     {
    23         while(T--)
    24         {
    25           scanf("%lf%lf",&h,&v);
    26           double l=0;
    27           double r=pi/2;
    28           double midx,midy;
    29           while (r-l>eps)
    30           {
    31             midx=(l+l+r)/3;
    32             midy=(l+r+r)/3;
    33             if(ans(midx)>ans(midy))
    34                 r=midy;
    35             else l=midx;
    36           }
    37           printf("%.2f
    ",ans(l));
    38         }
    39     }
    40     return 0;
    41 }
  • 相关阅读:
    Python脚本传參和Python中调用mysqldump
    金蝶K3管理软件PDA条码解决方式,盘点机与金蝶K3无缝对接
    android设置中的Preferencescreen使用方法介绍与分析
    设计模式之6大原则(3)-依赖倒置原则
    C# DataTable的詳細使用方法
    C++学习笔记13-类继承
    hdu1023
    Haskell 差点儿无痛苦上手指南
    三角形、长方形、正方形、梯形、圆等的周长计算公式和面积计算公式
    (黑客游戏)HackTheGame1.21 过关攻略
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6557130.html
Copyright © 2020-2023  润新知