poj2318TOYS(叉积,二分)

来源:互联网 发布:楼吵克星 淘宝 编辑:程序博客网 时间:2024/05/01 14:46

题目链接:点击打开链接

题意:n条线段把一个平面分为n+1个区域,询问每个区域的玩具的个数

知识点:p在直线ab的左边-----pa×pb<0

#include<stdio.h>int num[5010],up[5010],down[5010];int n,m,x1,y1,x2,y2,x,y;int judge(int ax,int ay,int bx,int by,int px,int py){return (ax-px)*(by-py)-(ay-py)*(bx-px);}int erfen(int a,int b){int l=0,r=n,mid;while(l<=r){mid=(l+r)/2;if(judge(up[mid],y1,down[mid],y2,a,b)<0)r=mid-1;elsel=mid+1;}return r;}int main(){int i;while(scanf("%d",&n),n)    {    scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);    for(i=1;i<=n;i++)    {    scanf("%d%d",&up[i],&down[i]);    num[i]=0;}num[0]=0;up[0]=down[0]=x1;    while(m--)    {    scanf("%d%d",&x,&y);    num[erfen(x,y)]++;}    for(i=0;i<=n;i++)    printf("%d: %d\n",i,num[i]);    printf("\n");}return 0; } 


0 0