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) 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 }
  • 相关阅读:
    【Ogre编程入门与进阶】第二章 Ogre相关知识回顾 【转载】
    Ogre1.7.2 + CEGUI0.7.5环境配置 【转载】 需要配制出自己的基础环境
    JS_模拟广告栏跟随效果
    JS_模拟电商网站放大镜效果
    JS_图片轮播事件
    JS_DOM事件之鼠标事件之随鼠标移动
    JS_DOM之小球随鼠标移动事件
    JS_DOM事件温习
    JS_原型和继承之小案例
    JS_生成随机矩形位置/矩形大小_面向对象_原型+构造函数模式
  • 原文地址:https://www.cnblogs.com/ECJTUACM-873284962/p/6557130.html
Copyright © 2011-2022 走看看