POJ 2002 Squares(已知平面n点枚举正方形)
2014-09-23 16:42
357 查看
POJ 2002 Squares(已知平面n点枚举正方形)
http://poj.org/problem?id=2002
题意: [b]ZOJ 2347
需要修改输入输出格式[/b]
给你二维平面的n个点坐标,问你这n个点能组成多少个不同的正方形?(正方形不一定平行于坐标轴且由相同4点构成的正方形只能算一个)
分析:
我们只需要枚举(构成正方形一条边的)两个点即可以推出正方形的另外两个点的坐标.
首先我们把所有点按x优先y其次的顺序排序,然后枚举两个点(x1,y1)和(x2,y2).假设(x1,y1)和(x2,y2)构成了一个正方形的一条边,那么该正方形的另外两个点(x3,y3)和(x4,y4)有两种情况,如下图:
![](http://img.blog.csdn.net/20140923163939437?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQ4MDYwMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20140923164000859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQ4MDYwMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
AC代码:
http://poj.org/problem?id=2002
题意: [b]ZOJ 2347
需要修改输入输出格式[/b]
给你二维平面的n个点坐标,问你这n个点能组成多少个不同的正方形?(正方形不一定平行于坐标轴且由相同4点构成的正方形只能算一个)
分析:
我们只需要枚举(构成正方形一条边的)两个点即可以推出正方形的另外两个点的坐标.
首先我们把所有点按x优先y其次的顺序排序,然后枚举两个点(x1,y1)和(x2,y2).假设(x1,y1)和(x2,y2)构成了一个正方形的一条边,那么该正方形的另外两个点(x3,y3)和(x4,y4)有两种情况,如下图:
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1000+5; struct Node { int x,y; bool operator<(const Node& rhs)const { return x<rhs.x || (x==rhs.x && y<rhs.y); } }nodes[maxn]; int main() { int n; while(scanf("%d",&n)==1 && n) { int ans=0;//正方形个数 for(int i=0;i<n;++i) scanf("%d%d",&nodes[i].x,&nodes[i].y); sort(nodes,nodes+n); for(int i=0;i<n;++i) for(int j=i+1;j<n;++j) { Node tmp;//tmp作为正方形的第3或4个点 tmp.x=nodes[i].x+nodes[i].y-nodes[j].y; tmp.y=nodes[i].y+nodes[j].x-nodes[i].x; if(!binary_search(nodes,nodes+n,tmp)) continue; tmp.x=nodes[j].x+nodes[i].y-nodes[j].y; tmp.y=nodes[j].y+nodes[j].x-nodes[i].x; if(!binary_search(nodes,nodes+n,tmp)) continue; ++ans; } printf("%d\n",ans/2);//注意这里/2 } return 0; }
相关文章推荐
- POJ 2002 Squares(计算几何 找正方形 hash枚举)
- poj 2002 Squares (哈希+正方形已知相邻两点求另外两点的坐标)
- POJ 2002 Squares (已知正方形对角线两点推另外两点,STL set)
- poj 2002 Squares 判断一些点能组成多少个正方形 二分查找
- Poj 2002 Squares (正方形个数 Hash)
- poj 2002 Squares(枚举+点hash)
- 2002 Squares 平面点集能组成多少正方形 哈希表
- poj2002--Squares(n个点求正方形个数)
- poj 2002(好题 链式hash+已知正方形两点求另外两点)
- 【POJ】2002 - Squares(暴力枚举 & 双关键字二分查找)
- poj 2002 hash(平面上若干点能够成多少正方形)
- POJ2002 Squares(枚举)
- POJ 2002-Squares(hash拉链法-正方形个数)
- POJ 2002 Squares 求正方形的个数,点哈希
- POJ 2002 Squares
- POJ 2002 Squares
- POj 2002 UVALive - 3047 C - Squares 【计算几何+二分求解】
- poj2002——Squares
- [USACO2002][poj1944]Fiber Communications(枚举)
- poj 2002 Squares