#include #include #include #define zero(x) if(dcmp(x)==0)x=0 #define cross(p0,p1,p2) ((p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x)) #define dot(p0,p1,p2) ((p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y)) #define luoti(h) (sqrt(2*(h)/9.18)) #define ponseg(p0,p1,p2) (dcmp(cross(p0,p1,p2))==0&&dcmp(dot(p0,p1,p2))<=0) using namespace std; const double eps=1e-4; const double inf=1e10; struct point{ double x,y; }; struct wx{ double z,k; int n,type; point p[11]; }rec[11]; double cmp(wx a,wx b){ return a.z>b.z; } int dcmp(double x){ return (x>eps)-(x<-eps); } bool reach(double vx,double vy,double x,double y,double z,wx pol){ double sum=luoti(z-pol.z); point p; p.x=x+sum*vx; p.y=y+sum*vy; for(int i=0;iz){ i--; n--; } } if(z<0){ puts("Forever!"); continue; } sort(rec,rec+n,cmp); double times=0; for(int i=0;times>=0&&i