#include #include #include #include #include #include #include using namespace std; #define print(x) cout<>x #define SIZE 128 #define pb push_back const double eps=1e-10; inline int zero(double x) { if(x<-eps) return -1; else if(fabs(x)=min(l2.p1.x,l2.p2.x))&& (max(l1.p1.y,l1.p2.y)>=min(l2.p1.y,l2.p2.y))&& (max(l2.p1.x,l2.p2.x)>=min(l1.p1.x,l1.p2.x))&& (max(l2.p1.y,l2.p2.y)>=min(l1.p1.y,l1.p2.y))&&//蹇ュ楠 fabs((xmult(l1.p1,l2.p1,l2.p2)*xmult(l1.p2,l2.p1,l2.p2))<=eps)&& fabs((xmult(l2.p1,l1.p1,l1.p2)*xmult(l2.p2,l1.p1,l1.p2))<=eps))//璺ㄧ瀹楠 { lineIntersect(makeLine(l1),makeLine(l2),p); return true; } else return false; } struct polygen { point pvec[SIZE]; point core[SIZE]; int sz; polygen(){sz=0;} inline void push_point(const point& p) { pvec[sz++]=p; } void Cut(segment s) { int q=0; for(int i=0;i=0) { core[q++]=pvec[i]; } else { point cp; if(xmult(pvec[i],s.p2,s.p1) * xmult(pvec[(i+1)%sz],s.p2,s.p1)<0) { point cp; line l1=makeLine(s); line l2=makeLine(pvec[i],pvec[(i+1)%sz]); lineIntersect(l1,l2,cp); core[q++]=cp; } } } for(int i=0;i0) print("Surveillance is possible."); else print("Surveillance is impossible."); puts(""); } return 0; }