程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu4445-Crazy Tank

hdu4445-Crazy Tank

編輯:C++入門知識

直接使用速度公式求解,采用的是使用枚舉三角函數值來計算;  


由發射塔到地面的速度公式為   v0 * v0  -  vy *  vy = 2 * g * h ( v0 為末速度,均為豎直方向的速度 )

                                                      然後計算水平距離l ,使用l 與敵方和友方坐標進行比較, 當位於友方坐標內,直接跳出循環 ;

 

[cpp] 
// File Name: 4445.cpp  
// Author: bo_jwolf  
// Created Time: 2013年05月24日 星期五 13:28:41  
 
#include<vector>  
#include<list>  
#include<map>  
#include<set>  
#include<deque>  
#include<stack>  
#include<queue>  
#include<bitset>  
#include<algorithm>  
#include<functional>  
#include<numeric>  
#include<utility>  
#include<sstream>  
#include<iostream>  
#include<iomanip>  
#include<cstdio>  
#include<cmath>  
#include<cstdlib>  
#include<cstring>  
#include<ctime>  
 
using namespace std; 
int n ; 
double h , l1 , r1 ,l2 , r2 ; 
const int maxn = 1005 ; 
double a[ maxn ] ; 
const double g = -9.8 ; 
 
int ff( int x ) 

    double sy = x / 10000.0 ; 
    double sx = sqrt( 1.0 - sy * sy ) ; 
    int sum = 0 ; 
    for(int  i = 0 ; i < n ; i++ ) 
    { 
        double vy = a[ i ] * sy  ; 
        double t = ( - 1.0 *vy  - sqrt( vy * vy + 2 * g * h ) ) / g ; 
        double l =  a[ i ] * sx * t ; 
        if( l >= l2 && l <= r2 ) 
            return 0 ;  
        if( l >= l1 && l <= r1 ) 
            sum++ ; 
    } 
    return sum ; 

 
int main() 

    int Case ; 
    int ans ; 
//  freopen("cin.txt", "r", stdin);  
    while( scanf( "%d" , &n ) && n) 
    { 
            scanf( "%lf%lf%lf%lf%lf" , &h , &l1 , &r1 , &l2 ,&r2 ) ; 
            for( int i = 0 ; i < n ; i++ ) 
            { 
                scanf( "%lf" , &a[ i ] ) ; 
            } 
            ans = 0 ; 
            h = -1.0 * h ; 
            for(int  i = -10000 ; i < 10000 ; i++ ) 
            { 
                int x = ff( i ) ; 
                if( x > ans )  
                    ans = x ;  
            } 
            printf( "%d\n" , ans ) ; 
         
    } 
return 0; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved