# include <stdio.h>
# include <string.h>
int n,m,x1,x2,y1,y2;
struct node
{
int x,y;
};
struct li
{
node a,b;
int sum;
}line[2509];
int cross(node a,node b,node c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
void solve(node c)
{
for(int i=0;i<=n;i++)
{
if(cross(line[i].a,line[i].b,c)>0&&cross(line[i+1].a,line[i+1].b,c)<0)
{line[i].sum++;break;}
}
return ;
}
int main ()
{
int a,b,mark=1;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
if(mark==0)
printf("\n");
memset(line,0,sizeof(line));
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
line[0].a.x=x1;
line[0].a.y=y1;
line[0].b.x=x1;
line[0].b.y=y2;
line[n+1].a.x=x2;
line[n+1].a.y=y1;
line[n+1].b.x=x2;
line[n+1].b.y=y2;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
line[i].a.x=a;
line[i].a.y=y1;
line[i].b.x=b;
line[i].b.y=y2;
}
node c;
for(int i=0;i<m;i++)
{
scanf("%d%d",&c.x,&c.y);
solve(c);
}
for(int i=0;i<=n;i++)
{
printf("%d: %d\n",i,line[i].sum);
}
mark=0;
}
return 0;
}
需要判断玩具在间隔的左侧还是右侧 。。。。 用cross解决
zoj 2381
最新推荐文章于 2014-05-27 16:07:57 发布