您的位置:首页 > 其它

POJ 2318 TOYS 计算几何 入门题 叉积 + 二分

2012-08-15 14:15 513 查看
第一题计算几何,1A,好开心哦。

View Code

#include<stdio.h>
#include<string.h>
#include<math.h>
struct point
{
int x, y;
};

int up[5007],down[5007];;
int n, m;
point toy[5007];
point a, b;
int ans[5007];

int cross(point o, point a, point b)
{
return ((a.x-o.x)*(b.y-o.y)-(a.y-o.y)*(b.x-o.x));
}
int find(point key)
{
int l , r, mid;
l = 0; r = n+1;
point upp, downn;
upp.y = a.y;
downn.y = b. y;
while(l <= r)
{
mid = (l + r) >> 1;
upp.x = up[mid];
downn.x = down[mid];
if(cross(downn, upp, key) > 0 ) r = mid - 1;
else l = mid + 1;
}
return l;
}
int main()
{
int i, j;
while( ~scanf("%d", &n) && n)
{
scanf("%d", &m);
scanf("%d%d%d%d",&a.x, &a.y, &b.x, &b.y);
up[0] = down[0] = a.x;
up[n+1] = down[n+1] = b.x;
for(i = 1; i <= n; i++)
scanf("%d%d",&up[i], &down[i]);
memset(ans, 0, sizeof(ans));
for(i=1;i<=m;i++)
{
scanf("%d%d", &toy[i].x, &toy[i].y);
int index = find(toy[i]);
ans[index-1]++;
}
for(i=0;i<=n;i++)
printf("%d: %d\n",i, ans[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: