#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
const double g = 9.8;
using namespace std;
double h,l1,r1,l2,r2;z
double cal(double ang,double v)
{
double vx,vy;
vx = v * sin(ang);
vy = v * cos(ang);
double t=(sqrt(vy*vy+2*g*h)-vy)/g; // vt + 1/2*g*t^2 = h
return t*vx;
}
int main()
{
int n;
double V[205];
const double PI = acos(-1.0);
while(scanf("%d",&n)!=EOF && n)
{
scanf("%lf%lf%lf%lf%lf",&h,&l1,&r1,&l2,&r2);
int ans=0;
for(int i=1;i<=n;i++)
scanf("%lf",&V[i]);
double an=0;
while(an<=PI) //因为是枚举的 所以就不能想着在上半个 90度就可以达到区域下半个90度也可以达到
{ //所以误区就是只枚举上半个90度。
int tans=0;
bool hit=false;
for(int i=1;i<=n;i++)
{
float dis=cal(an,V[i]);
if(dis<=r2 && dis>=l2) //题目说的是在不打到自己队友的前提下 所以一旦打到自己队友了 这个角度是作废的。
{
hit=true;
break;
}
if(dis<=r1 && dis>=l1)
tans++;
}
if(tans>ans && !hit)
ans=tans;
an+=PI/1000; //枚举1000份
}
cout<<ans<<endl;
}
return 0;
}
hdu 4445 Crazy Tank
最新推荐文章于 2017-04-28 11:40:00 发布