首页 > 代码库 > HDU 4445 几何枚举
HDU 4445 几何枚举
给出两个坦克位置,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; }
HDU 4445 几何枚举
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。