// Jlh打靶.cpp : 定义控制台应用程序的入口点。 // #include<stdio.h> #include<math.h> #include<stdlib.h> #define N 110 double x[N],y[N],mx[4],my[4]; double f1(double x0,double y0) { double a,b,c; if(my[0]==my[1]) { a=0.0;c=-1.0*my[1];b=1.0; } else if(mx[0]==mx[1]) { b=0.0;c=-1.0*mx[1];a=1.0; } else { b=1.0*(mx[1]-mx[0])/(my[0]-my[1]); c=-1*(b*my[0]+mx[0]); a=1.0; } return (a*x0+b*y0+c); } double f2(double x0,double y0) { double a,b,c; if(my[1]==my[2]) { a=0.0;c=-1.0*my[1];b=1.0; } else if(mx[1]==mx[2]) { b=0.0;c=-1.0*mx[1];a=1.0; } else { b=1.0*(mx[2]-mx[1])/(my[1]-my[2]); c=-1*(b*my[2]+mx[2]); a=1.0; } return (a*x0+b*y0+c); } double f3(double x0,double y0) { double a,b,c; if(my[2]==my[3]) { a=0.0;c=-1.0*my[2];b=1.0; } else if(mx[2]==mx[3]) { b=0;c=-mx[2];a=1; } else { b=1.0*(mx[3]-mx[2])/(my[2]-my[3]); c=-1*(b*my[2]+mx[2]); a=1.0; } return (a*x0+b*y0+c); } double f4(double x0,double y0) { double a,b,c; if(my[0]==my[3]) { a=0;c=-my[3];b=1.0; } else if(mx[0]==mx[3]) { b=0;c=-mx[3];a=1.0; } else { b=1.0*(mx[3]-mx[0])/(my[0]-my[3]); c=-1*(b*my[0]+mx[0]); a=1; } return (a*x0+b*y0+c); } int pending(int n) { double q,w,e,r; int sum=0; int i; for(i=0;i<n;i++) { q=f1(x[i],y[i]); w=f2(x[i],y[i]); e=f3(x[i],y[i]); r=f4(x[i],y[i]); if(q*e<=0&&w*r<=0) sum++; } return sum; } int main() { int t,n,i,j,ans; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) { scanf("%lf%lf",&x[i],&y[i]); } for(i=0;i<4;i++) { scanf("%lf%lf",&mx[i],&my[i]); } ans=pending(n); printf("%d",ans); if(t>0) printf("\n"); } return 0; } |
Double click to view unformatted code.