码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4445 几何枚举

时间:2014-10-20 17:21:49      阅读:196      评论:0      收藏:0      [点我收藏+]

标签: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;
}


HDU 4445 几何枚举

标签:blog   io   os   for   sp   2014   on   log   amp   

原文地址:http://blog.csdn.net/u011932355/article/details/40301815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!