POJ 2398 Toy Storage(叉积的简单应用)
2013-08-09 10:41
239 查看
题意:有一个盒子,里面有n块隔板将其分为n+1个部分(挡板坐标已给出),现在给出m个球的坐标,让你判断每个分割出的部分里面有多少个小球。
思路:利用叉积判断每个挡板是在球的左侧还是右侧(叉积>0在左侧,叉积<0在右侧),直接枚举即可。(数据很水,其实二分会更快一点,但是由于是很久以前的代码也就不想改了)
思路:利用叉积判断每个挡板是在球的左侧还是右侧(叉积>0在左侧,叉积<0在右侧),直接枚举即可。(数据很水,其实二分会更快一点,但是由于是很久以前的代码也就不想改了)
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<algorithm> #define eps 1e-10 #define maxn 100000+10 struct point { int x,y; }; struct point shelter[maxn];//挡板向量 struct point toy[maxn];//玩具向量 int dcmp(double x) { if(fabs(x)<eps) return 0; else return x<0?-1:1; } double cross(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } int main() { int n,m,x1,y1,x2,y2,i,j,k; int a[maxn],b[maxn];//挡板坐标 int xx,yy;//输入的玩具坐标 while(scanf("%d%d",&n,&m)&&n!=0) { int count=0; double temp; scanf("%d%d%d%d",&x1,&y1,&x2,&y2);//盒子坐标 int ans[maxn]={0};//最后的结果 int result[maxn]={0};//保存每个盒子中的数量 for(i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]);//挡板 shelter[i].x=a[i]-b[i],shelter[i].y=y1-y2;//挡板向量 } //对挡板坐标排序(很蛋疼的用了个冒泡) for(i=1;i<=n;i++) for(j=i;j<=n;j++) { int ch; double sh; if(a[i]>a[j])//升序 { ch=a[i],a[i]=a[j],a[j]=ch; ch=b[i],b[i]=b[j],b[j]=ch; sh=shelter[i].x,shelter[i].x=shelter[j].x,shelter[j].x=sh; sh=shelter[i].y,shelter[i].y=shelter[j].y,shelter[j].y=sh; } } int sum=0; for(i=1;i<=m;i++)//枚举每个玩具 { scanf("%d%d",&xx,&yy);//每个玩具的坐标 for(j=1;j<=n;j++)//枚举每个挡板直到第一个出现在小球右侧的挡板 { toy[i].x=xx-b[j],toy[i].y=yy-y2;//玩具向量 temp=cross(toy[i].x,toy[i].y,shelter[j].x,shelter[j].y); if(dcmp(temp)==-1) { ans[j-1]++; sum++; break; } } } ans =m-sum; for(i=0;i<=n;i++) if(ans[i]) result[ans[i]]++; printf("Box\n"); for(i=0;i<n;i++) if(result[i]) printf("%d: %d\n",i,result[i]); } return 0; }
相关文章推荐
- poj 2398 Toy Storage(叉积判断点是否在四边形内)
- POJ 2398 Toy Storage [叉积判断+二分查找]【计算几何】
- POJ2398_Toy Storage(几何/叉积运用)
- Poj 2398 Toy Storage (叉积+二分)
- POJ 2398 Toy Storage(叉积)
- 【叉积性质】POJ 2318 TOYS && POJ 2398 Toy Storage
- POJ 2398 叉积应用
- poj 2398 Toy Storage 【统计相同个数的点的 区域个数】【二分+叉积判断】
- POJ 2398 Toy Storage(计算几何,叉积判断点和线段的关系)
- poj 2398 Toy Storage(判断点在多边形内,叉积)
- poj 2318 TOYS & poj 2398 Toy Storage (叉积)
- 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage
- POJ 2398 Toy Storage(叉积+二分)
- 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 (叉积判断点和线段的关系)