HDU4445

来源:互联网 发布:淘宝贷款app 编辑:程序博客网 时间:2024/05/16 19:16

http://acm.hdu.edu.cn/showproblem.php?pid=4445

题意: 在高度为H的位置一部坦克, 你可以调整任意角度一次, 发射n发炮弹, 不可以击中队友,
问你最大可以击中敌人的次数.
 
2. a的取值0~pi(3.1415926), 在某一个角度出现最大值, 枚举阀值eps = pi/1000.

主要是角度不同,投得地方不同,若投到友方区域,直接返回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;}


0 0
原创粉丝点击