• hdu 4445 Crazy Tank


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    const double g = 9.8;
    
    using namespace std;
    
    double h,l1,r1,l2,r2;z
    
    double cal(double ang,double v)
    {
        double vx,vy;
        vx = v * sin(ang);
        vy = v * cos(ang);
    
        double t=(sqrt(vy*vy+2*g*h)-vy)/g;     //   vt + 1/2*g*t^2 = h   
    
        return t*vx;
    
    }
    
    int main()
    {
        int n;
    
        double V[205];
        const double PI = acos(-1.0);
    
        while(scanf("%d",&n)!=EOF && n)
        {
            scanf("%lf%lf%lf%lf%lf",&h,&l1,&r1,&l2,&r2);
            int ans=0;
    
            for(int i=1;i<=n;i++)
            scanf("%lf",&V[i]);
    
            double an=0;
            while(an<=PI)   //因为是枚举的  所以就不能想着在上半个 90度就可以达到区域下半个90度也可以达到   
            { //所以误区就是只枚举上半个90度。
                int tans=0;
                bool hit=false;
                for(int i=1;i<=n;i++)
                {
                    float dis=cal(an,V[i]);
    
                    if(dis<=r2 && dis>=l2)   //题目说的是在不打到自己队友的前提下  所以一旦打到自己队友了  这个角度是作废的。
                    {
                        hit=true;
                        break;
                    }
    
                    if(dis<=r1 && dis>=l1)  
                        tans++;
                }
                if(tans>ans && !hit)
                ans=tans;
    
                an+=PI/1000;   //枚举1000份
            }
            cout<<ans<<endl;
        }
        return 0;
    }
    



  • 相关阅读:
    「题解」洛谷 P1731 [NOI1999]生日蛋糕
    「题解」洛谷 P1063 能量项链
    Log4j2笔记
    基数排序
    会计知识
    归并排序
    CF668 题解
    拉格朗日反演
    [国家集训队]数颜色 / 维护队列 「带修莫队」
    简单的填数「贪心」
  • 原文地址:https://www.cnblogs.com/pangblog/p/3239185.html
Copyright © 2020-2023  润新知