#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
double h,l1,l2,r1,r2;
const double PI = acos(-1.0);
int n;
double sp[209];
void input()
{
scanf("%lf%lf%lf%lf%lf",&h,&l1,&r1,&l2,&r2);
for(int i=0;i<n;i++)
scanf("%lf",&sp[i]);
}
int ok1(double aph,int k)
{
double v,v1,v2,vt,t,s;
v = sp[k];
v1 = v*sin(aph),v2 = v*cos(aph);
vt = sqrt(2*9.8*h+v2*v2);
t = (vt+v2)/9.8;
s = v1*t;//cout<<s<<endl;
if(s>=l2&&s<=r2) return -1;
if(s>=l1&&s<=r1) return 1;
return 0;
}
int ok2(double aph,int k)
{
double v,v1,v2,vt,t,s;
v = sp[k];
v1 = v*sin(aph),v2 = v*cos(aph);
vt = sqrt(2*9.8*h+v2*v2);
t = (vt-v2)/9.8;
s = v1*t;//cout<<s<<endl;
if(s>=l2&&s<=r2) return -1;
if(s>=l1&&s<=r1) return 1;
return 0;
}
void solve()
{
int ans = 0;
for(int i=0;i<1800;i++)
{
int tmp = 0;
for(int j=0;j<n;j++)
{
int k = ok1(PI*i/3600,j);
if(k==-1)
{
tmp = -1;
break;
}
if(k==1) tmp++;
}
ans = max(ans,tmp);
}
for(int i=0;i<1800;i++)
{
int tmp = 0;
for(int j=0;j<n;j++)
{
int k = ok2(PI*i/3600,j);
if(k==-1)
{
tmp = -1;
break;
}
if(k==1) tmp++;
}
ans = max(ans,tmp);
}
printf("%d\n",ans);
}
int main()
{
freopen("in.txt","r",stdin);
while(~scanf("%d",&n)&&n)
{
input();
solve();
}
return 0;
}
HDU 4445 Crazy Tank(枚举角度)
最新推荐文章于 2017-04-28 11:40:00 发布