poj2318 Toys-叉积和二分思想
来源:互联网 发布:java 三大特性 编辑:程序博客网 时间:2024/05/10 08:32
题目链接:http://poj.org/problem?id=2318
对每个玩具二分线段下标,利用叉积判断在线段的左边还是右边,利用二分的思想来查找点在那个段里,然后在那个矩形区域,合并在区域中的数
#include <iostream>#include <stdio.h>#include <string.h>#define Size 5050using 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;}
0 0
- poj2318 Toys-叉积和二分思想
- POJ2318 TOYS 解题报告【二分答案+向量叉积】
- 叉积的性质 【poj2318】 TOYS
- POJ2318-toys(计算几何基础+二分)
- poj2318 TOYS(计算几何+叉积+二分)
- [POJ2318]TOYS(计算几何+二分)
- [POJ2318]TOYS(计算几何+二分)
- poj2318—TOYS(计算几何+二分)
- POJ2318---TOYS (基础计算几何:叉积应用)
- poj2318 - TOYS
- poj2318 TOYS
- 【poj2318】TOYS
- [Poj2318]TOYS
- poj2318 Toys
- poj2318 TOYS
- poj2318 TOYS
- POJ2318 TOYS
- POJ2318 TOYS
- 二叉树的遍历(前中后,层次)——legend
- IT行业经典非技术面试题汇总
- C++实现FTP断点上传和下载思路
- Cocos2d-x 3.0final 终结者系列教程23CocosStudio UI组件使用大全Cocos2d-x3.2使用
- Android2.3解析json出错,4.0不报错
- poj2318 Toys-叉积和二分思想
- Java程序打包成jar包
- iReport中纸张的大小 换算
- android NullpointException 常见的原因
- ie mode
- 如何让service被管理器杀死后自动重启
- GTK开发
- IDempiere的运行第三篇(郑州就维软件)
- poj之最长递增子序列