此题看上去好像需要很复杂,因为抛物运动距离其实是一个中间低,两边高的曲线,难道写个三分?

然后恶意YY一下,才PI的弧度,分它个10000份枚举一下精度都够大了吧……事实上,10000就超时了,手贱一改,1000就过掉了……瞬间变大水题一枚。

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    int i,j,n,hit,ans;
    double h,l1,r1,l2,r2,v[210];
    double l,r,m,al,t,vy,vx,x,ag;
    bool hitFriend;
    const double PI=acos(-1.0),g=9.8;
    const double eps=PI/1000;
    while(scanf("%d",&n),n){
        scanf("%lf%lf%lf%lf%lf",&h,&l1,&r1,&l2,&r2);
        for(i=0;i<n;i++){
            scanf("%lf",&v[i]);
        }
        l=0;r=PI;
        ans=0;
        for(ag=0;ag<PI;ag+=eps){
            hitFriend=false;
            hit=0;
            for(i=0;i<n;i++){
                vy=v[i]*cos(ag);
                vx=v[i]*sin(ag);
                t=(sqrt(4*vy*vy+8*g*h)-2*vy)/2/g;
                x=vx*t;
                if(l2<=x&&x<=r2){
                    hitFriend=true;
                    break;
                }
                if(l1<=x&&x<=r1){
                    hit++;
                }
            }
            if(!hitFriend&&ans<hit){
                ans=hit;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}