• HDU 5144


     题意:在给定的高度和初速度,任意抛使得它水平距离最远。

    题解:我们可以很容易的推出 length = v*cos(x)*( sqrt( 2.0*h*g + v*v*sin(x)*sin(x) ) + v*sin(x) ) / g; 然后对 [ 0, π/2 ] 之间的弧度三分查找(凸线图形一般用三分)

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <math.h>
     5 #include <ctype.h>
     6 #include <map>
     7 #include <set>
     8 #include <string>
     9 #include <vector>
    10 #include <queue>
    11 #include <stack>
    12 #include <list>
    13 #include <algorithm>
    14 #include <iostream>
    15 #define PI acos( -1.0 )
    16 using namespace std;
    17 typedef pair<int,int> P;
    18 typedef long long ll;
    19 const double E = 1e-7;
    20 
    21 const double g = 9.8;
    22 double h, v;
    23 
    24 double dis( double x )
    25 {
    26     double ans = v*cos(x)*( sqrt( 2.0*h*g + v*v*sin(x)*sin(x) ) + v*sin(x) ) / g;
    27     return ans;
    28 }
    29 
    30 int main()
    31 {
    32     int T;
    33     scanf( "%d", &T );
    34     while( T-- )
    35     {
    36         scanf( "%lf%lf", &h, &v );
    37         double r, l;
    38         double legth = 0;
    39         r = PI / 2.0;
    40         l = 0;
    41         while( r-l > E )
    42         {
    43             double mid =  l + ( r-l ) / 3;
    44             double midmid = r - ( r-l ) / 3;
    45             double ans1 = dis( mid );
    46             double ans2 = dis( midmid );
    47             if( ans1 < ans2 ) {l = mid; legth = max( legth, ans2 ); }
    48             else { r = midmid; legth = max( legth, ans1 ); }
    49         }
    50         printf( "%.2lf
    ", legth );
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    布局的诡异bug合集+解决方法(更新中)
    java并发:CopyOnWriteArrayList简单理解
    java集合: LinkedList源码浅析
    Idea设置类注释模板
    jquery使用FormData提交数据
    postman发送json请求
    消息队列的简单理解
    如何设计一个消息队列?
    SpringBoot配置logback
    linux下安装kafka
  • 原文地址:https://www.cnblogs.com/ADAN1024225605/p/4163122.html
Copyright © 2020-2023  润新知