poj2318 Toys-叉积和二分思想
2014-08-19 14:25
92 查看
题目链接:http://poj.org/problem?id=2318
对每个玩具二分线段下标,利用叉积判断在线段的左边还是右边,利用二分的思想来查找点在那个段里,然后在那个矩形区域,合并在区域中的数
对每个玩具二分线段下标,利用叉积判断在线段的左边还是右边,利用二分的思想来查找点在那个段里,然后在那个矩形区域,合并在区域中的数
#include <iostream> #include <stdio.h> #include <string.h> #define Size 5050 using namespace std; struct Point { int x,y; }; struct Line { Point a; Point b; }line[Size]; int cnt[Size]; int cross(Point p1,Point p2,Point p0) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } void Binsearch(Point c,int n) { int l,r,mid; l=0;r=n-1; while(l<r) { mid=(l+r)/2; if(cross(c,line[mid].a,line[mid].b)>0) l=mid+1; else r=mid; } if(cross(c,line[l].a,line[l].b)<0) cnt[l]++; else cnt[l+1]++; } int main() { int n,m,x1,y1,x2,y2; int t1,t2; Point toy; while(scanf("%d",&n)!=EOF&&n) { scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2); for(int i=0;i<n;i++) { scanf("%d%d",&t1,&t2); line[i].a.x=t1; line[i].a.y=y1; line[i].b.x=t2; line[i].b.y=y2; } memset(cnt,0,sizeof(cnt)); for(int i=0;i<m;i++) { scanf("%d%d",&toy.x,&toy.y); Binsearch(toy,n); } for(int i=0;i<=n;i++) { printf("%d: %d\n",i,cnt[i]); } printf("\n"); } return 0; }
相关文章推荐
- POJ2318:TOYS(叉积判断点和线段的关系+二分)&&POJ2398Toy Storage
- POJ2318 TOYS 解题报告【二分答案+向量叉积】
- [POJ2318]TOYS(计算几何-叉积+二分)
- POJ2318 TOYS[叉积 二分]
- 【解题报告】 POJ 2318 TOYS -- 判断点在某个梯形内 叉积 + 二分
- POJ 2318 TOYS (二维叉积、二分)
- POJ 2318 TOYS 叉积运算+二分
- poj 2318 TOYS(叉积+二分)
- POJ 2318 TOYS【叉积+二分】
- 二分+叉积 apio2011 陈可卿 计算几何的一道简单题 poj2318 兼集训总结
- POJ 2318 TOYS(叉积+二分or暴力)
- poj 2318 TOYS(叉积+二分)
- POJ 2318 TOYS 计算几何 入门题 叉积 + 二分
- POJ 2318 TOYS(叉积+二分)
- POJ2318 TOYS(叉积),POJ2398 TOY STORAGE
- POJ 2318 TOYS 计算几何 入门题 叉积 + 二分
- POJ 2318 TOYS 二分+叉积
- pku 2318 TOYS(叉积,二分)
- POJ 2318 TOYS [叉积判断+二分查找]【计算几何】
- 叉积+二分 poj2318