【HDU 4445】Crazy Tank(暴力)

高中物理斜抛运动,简单分析一下角度固定下来则可以计算每个cannonball的降落坐标lnd。

因此暴力计算不同角度下的结果。

#include <cstdio>
#include "cmath"
#include "algorithm"
#define ll long long
#define dd double
#define N 205
#define g 9.8
#define eps 1e-6
const dd pi=acos(-1.0);
ll h,l1,l2,r1,r2,n;
dd v[N];
using namespace std;
int main(){
    while(scanf("%d",&n),n){
        scanf("%d%d%d%d%d",&h,&l1,&r1,&l2,&r2);
        for(int i=1;i<=n;i++)
            scanf("%lf",&v[i]);
        int lans=0;
        for(dd d=0;d<1;d+=1./360){
            int ans=0,ok=1;
            dd s=sin(d*pi);
            dd c=cos(d*pi);
            for(int i=1;i<=n;i++){
                dd vx=v[i]*s;
                dd vy=v[i]*c;
                dd t=(sqrt(2*h*g+vy*vy)-vy)/g;
                dd lnd=vx*t;
                if(lnd>=l2&&r2>=lnd){ok=0;break;}
                if(lnd>=l1&&r1>=lnd)ans++;
            }
            if(ok)lans=max(ans,lans);    
        }
        printf("%d\n",lans);
    }
}

 

  

posted @ 2016-08-05 01:31  水郁  阅读(376)  评论(0编辑  收藏  举报
……