poj 2398 Toy Storage(计算几何,点跟直线的位置关系)
2013-08-01 14:03
441 查看
原题友情链接直通车~鼠标点击此处打开~poj 2398
这个题是poj 2318 的变形 点此打开链接poj 2318 题解报告
主要就是告诉你的划分的线段的顺序不是有序的了。然后再输出要求上要求输出的是有m个玩具的箱子的个数。
主要思路不变,只要把line数组里的直线排个序,跟2318一样的做法AC。
具体实现看代码。
这个题是poj 2318 的变形 点此打开链接poj 2318 题解报告
主要就是告诉你的划分的线段的顺序不是有序的了。然后再输出要求上要求输出的是有m个玩具的箱子的个数。
主要思路不变,只要把line数组里的直线排个序,跟2318一样的做法AC。
具体实现看代码。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int Maxsize = 5010; typedef struct { int x,y; }point; typedef struct { point a,b; }Line; Line line[Maxsize]; int cnt[Maxsize]; bool cmp(Line A,Line B) { if(A.a.x != B.a.x ) { return A.a.x < B.a.x; } else { return A.b.x < B.b.x; } } int crossProduct(point p1,point p2,point p0)/*叉乘判断点跟直线的位置关系*/ { return (p1.x - p0.x)*(p2.y - p0.y) - (p2.x - p0.x)*(p1.y - p0.y); } void found(point p0,int n)/*二分找区域*/ { int r,l,mid; l = 0 , r = n -1; while(l < r) { mid = (r + l )>>1; if(crossProduct(p0,line[mid].a,line[mid].b) > 0) { l = mid+1; } else { r = mid; } } if(crossProduct(p0,line[l].a,line[l].b) < 0) cnt[l]++; else cnt[l+1]++; } int main() { int n,m,x1,y1,x2,y2,t1,t2,ct; int key[Maxsize]; while(scanf("%d",&n) && n) { scanf("%d %d %d %d %d",&m,&x1,&y1,&x2,&y2); ct = 0; memset(cnt,0,sizeof(cnt)); memset(key,0,sizeof(key)); for(int i = 0 ; i < n ; i++) { scanf("%d %d",&t1,&t2); line[ct].a.x = t1; line[ct].b.x = t2; line[ct].a.y = y1; line[ct++].b.y = y2; } sort(line,line+n,cmp);/*对线段进行排序*/ for(int i = 0 ; i < m ; i++) { point p; scanf("%d %d",&p.x,&p.y); found(p,n); } int Maxcost = -1; for(int i = 0 ; i <= n ; i++) { if(Maxcost < cnt[i]) { Maxcost = cnt[i]; } } for(int i = 1 ; i <= Maxcost ; i++)/*统计有相同玩具数量的箱子的个数*/ { for(int j = 0 ; j <= n ; j++) { if(cnt[j] == i) { key[i]++; } } } printf("Box\n"); for(int i = 1 ; i <= Maxcost ; i++) { if(key[i]) { printf("%d: %d\n",i,key[i]); } } } return 0; }
相关文章推荐
- POJ 2398 Toy Storage 计算几何(点与直线的关系)
- POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置关系
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
- poj 2398 Toy Storage 【计算几何】【点和线的关系】
- poj 2318 TOYS(计算几何 点跟直线的位置关系)
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
- poj 2398 Toy Storage (计算几何,判断点和线段关系)
- poj 2398 Toy Storage(计算几何 点线关系)
- 7_4_P题 Toy Storage 题解[Poj 2398](计算几何,点线关系,二分)
- POJ 2318 TOYS(计算几何+点与直线位置关系+二分)
- POJ 2318:TOYS & POJ 2398:Toy Storage 计算几何
- POJ1269_Intersecting Lines(几何/叉积判断直线位置关系)
- POJ--2398 -- Toy Storage [计算几何]
- poj 2398 Toy Storage (计算几何)
- POJ 2398 Toy Storage [叉积判断+二分查找]【计算几何】
- POJ 2318 TOYS + POJ 2398 Toy Storage (点与直线的位置关系)
- POJ1269——Intersecting Lines(计算几何,直线关系判断)
- poj 2398 Toy Storage (计算几何)
- POJ 2398 Toy Storage(计算几何)
- POJ 2398 排序+叉积判断点与直线位置关系+统计