题解

zycoj  •  1个月前


include

include

include

using namespace std; const int N=5005; const double eps=1e-8; int n,t,m,ans; struct dian {

double x,y;
dian(double X=0,double Y=0)
{
	x=X,y=Y;
}
dian operator + (const dian &a) const
{
	return dian(x+a.x,y+a.y);
}
dian operator - (const dian &a) const
{
	return dian(x-a.x,y-a.y);
}

}a,b,c,p[N]; struct bian {

dian s,t;
bian(dian S=dian(),dian T=dian())
{
	s=S,t=T;
}

}l[N]; int read() {

int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
	if(p=='-')
		f=-1;
	p=getchar();
}
while(p>='0'&&p<='9')
{
	r=r*10+p-48;
	p=getchar();
}
return r*f;

} int sgn(double x) {

return x<-eps?-1:x>eps;

} double cj(dian a,dian b) {

return a.x*b.y-a.y*b.x;

} bool lc(dian a,dian b,dian c,dian d) {

return sgn(cj(c-a,b-a)*cj(b-a,d-a))>=0;

} bool jiao(dian a,dian b,dian c,dian d) {

return lc(a,b,c,d)&&lc(c,d,a,b);

} bool ok(dian a,dian b) {

for(int i=1;i<=m;i++)
	if(jiao(a,b,l[i].s,l[i].t))
		return 0;
return 1;

} int main() {

n=read(),t=read();
for(int i=1;i<=n;i++)
	p[i].x=read(),p[i].y=read();
for(int i=1;i<=t;i++)
{
	a.x=read(),a.y=read(),b.x=read(),b.y=read(),c.x=read(),c.y=read();
	l[++m]=bian(a,b),l[++m]=bian(b,c),l[++m]=bian(c,a);
}
for(int i=1;i<=n;i++)
	for(int j=i+1;j<=n;j++)
		if(ok(p[i],p[j]))
			ans++;
printf("%d\n",ans);
return 0;

}


评论: