# include <stdio.h>
# include <string.h>
# include <algorithm>
using namespace std;
# define eps 1e-8
int n,m;
struct node
{
double x,y;
};
struct line
{
node a,b;
}vex[1009];
int cmp(line a,line b)
{
if(a.a.x==b.a.x)
return a.b.x<b.b.x;
return a.a.x<b.a.x;
}
int zero(double x)
{
if(x>eps) return 1;
if(x<-eps) return -1;
return 0;
}
double cross(node a,node b,node c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
int on(node a,node b,node c)
{
double maxx=max(a.x,b.x);
double minx=min(a.x,b.x);
double maxy=max(a.y,b.y);
double miny=min(a.y,b.y);
if(c.x<=maxx&&c.x>=minx&&c.y<=maxy&&c.y>=miny)
return 1;
return 0;
}
int solve(node p)
{
for(int i=0;i<=n;i++)
{
if(zero(cross(vex[i].a,vex[i].b,p))==1&&zero(cross(vex[i+1].a,vex[i+1].b,p))==-1)
return i;
}
}
int main ()
{
int w[1009],ww[1009];
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
scanf("%d%lf%lf%lf%lf",&m,&vex[0].a.x,&vex[0].a.y,&vex[n+1].b.x,&vex[n+1].b.y);
vex[0].b.x=vex[0].a.x;
vex[0].b.y=vex[n+1].b.y;
vex[n+1].a.x=vex[n+1].b.x;
vex[n+1].a.y=vex[0].b.y;
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&vex[i].a.x,&vex[i].b.x);
vex[i].a.y=vex[0].a.y;
vex[i].b.y=vex[0].b.y;
}
sort(vex,vex+n+2,cmp);
//for(int i=0;i<=n+1;i++)
// printf("x===%lf\n",vex[i].a.x);
node p;
memset(w,0,sizeof(w));
memset(ww,0,sizeof(ww));
for(int i=0;i<m;i++)
{
scanf("%lf%lf",&p.x,&p.y);
int t=solve(p);
w[t]++;
}
for(int i=0;i<1009;i++)
{
if(w[i]!=0)
ww[w[i]]++;
}
printf("Box\n");
for(int i=0;i<1009;i++)
{
if(ww[i])
printf("%d: %d\n",i,ww[i]);
}
}
return 0;
}
注意空格 大爷的!!!!!! 还有sort(vex,vex+n+2,cmp)
zoj 1996
最新推荐文章于 2022-11-01 21:08:37 发布