View Code of Problem 2595

// 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.


Back to problem 2595