标签:blog io os for sp 2014 on log amp
给出两个坦克位置,N个炮弹,从(0,h)点以一定角度射出,问在某一角度下能够打到第一个坦克的炮弹最多个数,要求在该角度下所有炮弹都不会打到第二个坦克。
可以暴力水过,枚举角度判断即可
需要几个几何公式化简:
x=v*sinθ*t
v*cosθ*t+g*t*t/2=h
注意sin 和 cos 函数用多会超时
#include "stdio.h"
#include "string.h"
#include "math.h"
double pi=acos(-1.0);
int main()
{
int n,j,sum,ok,sb,ans;
double a,H,h,l1,r1,l2,r2,key,b,c,t,x,i,t1,t2,vx,vy;
double v[210];
while (scanf("%d",&n)!=EOF)
{
if (n==0) break;
scanf("%lf%lf%lf%lf%lf",&H,&l1,&r1,&l2,&r2);
for (j=1; j<=n; j++)
scanf("%lf",&v[j]);
if (l2<=l1 && r2>=r1)
{
printf("0\n");
continue;
}
ans=0;
sum=0;
for (i=0; i<3.1415926; i+=0.0007)
{
sum=0;
ok=1;
for (j=1;j<=n;j++)
{
a=4.9;
b=-v[j]*cos(i);
c=-H;
t=(-b+sqrt(b*b-4*a*c))/9.8;
x=sin(i)*v[j]*t;
if (x>=l2 && x<=r2 )
{
ok=0; break;
}
if (x>=l1 && x<=r1 )
sum++;
}
if (ok==1 && sum>=ans)
ans=sum;
// if (ans==n) break;
}
printf("%d\n",ans);
}
return 0;
}
标签:blog io os for sp 2014 on log amp
原文地址:http://blog.csdn.net/u011932355/article/details/40301815