http://acm.hdu.edu.cn/showproblem.php?pid=4445
题意: 在高度为H的位置一部坦克, 你可以调整任意角度一次, 发射n发炮弹, 不可以击中队友,
问你最大可以击中敌人的次数.
主要是角度不同,投得地方不同,若投到友方区域,直接返回0;
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
const double PI=acos(-1.0*1);
const double g=9.8;
double H,L1,R1,L2,R2;
double V0[205];
int n;
int ff(double x) //定义一个角度
{
int num=0;
for(int i=0;i<n;i++)
{
double Vx=V0[i]*cos(x);//水平方向的速度
double Vy=V0[i]*sin(x);//垂直方向的速度
double a=g/2;
double b=Vy;
double c=-H;
double t=(-b+sqrt(b*b-4*a*c))/(2*a);
double d=t*Vx;
if(d>=L2&&d<=R2) return 0;
if(d>=L1&&d<=R1) num++;
}
return num;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
scanf("%lf%lf%lf%lf%lf",&H,&L1,&R1,&L2,&R2);
for(int i=0;i<n;i++)
{
scanf("%lf",&V0[i]);
}
double add=PI/1000;
int ans=0;
for(double x=-PI/2;x<PI/2;x+=add)
{
ans=max(ans,ff(x));
}
printf("%d\n",ans);
}
return 0;
}