zoj 2381

来源:互联网 发布:中国网络电视直播 编辑:程序博客网 时间:2024/05/16 13:58
# 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解决
0 0
原创粉丝点击