#include<stdio.h> #include<math.h> #include<stdlib.h> #define eps 1e-8 #define zero(x) (((x)>0 ? (x):(-x))<eps) #define INF 0x3f3f3f3f struct Point { double x,y; }tre,point[80],tp; struct Line { Point a,b; }line[40]; double xmult(Point p1,Point p2,Point p0) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } double dmult(Point p1,Point p2,Point p0) { return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y); } int dis(Point p1,Point p2) { return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y); } int cmp(const void *a,const void *b) { Point *c=(Point *)a; Point *d=(Point *)b; int k=xmult(point[0],*c,*d); if(k<0||!k&&dis(point[0],*c)>dis(point[0],*d)) return 1; return -1; } int main() { int i,j,n,ans,tmp; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%lf%lf%lf%lf",&line[i].a.x,&line[i].a.y,&line[i].b.x,&line[i].b.y); point[2*i]=line[i].a; point[2*i+1]=line[i].b; } scanf("%lf%lf",&tre.x,&tre.y); int m=n; point[m].x=point[m++].y=0; point[m].x=0;point[m++].y=100; point[m].x=point[m++].y=100; point[m].x=100;point[m++].y=0; qsort(point+1,m-1,sizeof(Point),cmp); point[m++]=point[0]; ans=INF; for(i=0;i<m-1;i++) { tmp=1; //tp.x=(point[i].x+point[i+1].x)/2; //tp.y=(point[i].y+point[i+1].y)/2; tp=point[i]; for(j=0;j<n;j++) { if(xmult(tre,line[j].a,line[j].b)*xmult(tp,line[j].a,line[j].b)<-eps&& xmult(line[j].a,tre,tp)*xmult(line[j].b,tre,tp)<-eps)tmp++; } if(tmp<ans)ans=tmp; } printf("Number of doors = %d ",ans-1); return 0; }