poj2318 TOYS 点积叉积理解

题意大概为有一个箱子被格成n+1部分,往箱子里随机放m个玩具,问各个部分最终各有几个玩具。

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int maxn=1<<13;

struct LINE
{
    int x_1,y_1,x_2,y_2;
}line[maxn];

int point[maxn][2];

bool judge(int x1,int y1,int x0,int y0,int x2,int y2)
{
    int p=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);
    if(p<0)
    return true;
    return false;
}
int main()
{
    //freopen("test.txt","r",stdin);
    int n,m,x1,y1,x2,y2;
    while(scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2),n)
    {
        int i,j;
        for(i=0;i<n;i++)
        {
            scanf("%d%d",&line[i].x_1,&line[i].x_2);
            line[i].y_1=y1,line[i].y_2=y2;
        }
        line[n].x_1=x2,line[n].y_1=y1;
        line[n].x_2=x2,line[n].y_2=y2;
        for(i=1;i<=m;i++)
        {
            scanf("%d%d",&point[i][0],&point[i][1]);
        }
        int ans[maxn];
        memset(ans,0,sizeof(ans));
        for(i=1;i<=m;i++)
        {
            for(j=0;j<=n;j++)
            {
                if(judge(point[i][0],point[i][1],line[j].x_2,line[j].y_2,
                   line[j].x_1,line[j].y_1))
                {
                    ans[j]++;
                    break;
                }
            }
        }
        for(i=0;i<=n;i++)
        printf("%d: %d\n",i,ans[i]);
        printf("\n");
    }
    return 0;
}

 

posted @ 2013-03-12 13:31  longlongago  Views(116)  Comments(0Edit  收藏  举报