POJ 2002 Squares
来源:互联网 发布:飓风bt软件 编辑:程序博客网 时间:2024/04/29 01:59
Description
A square is a 4-sided polygonwhose sides have equal length and adjacent sides form 90-degree angles. It isalso a polygon such that rotating about its centre by 90 degrees gives the samepolygon. It is not the only polygon with the latter property, however, as aregular octagon also has this property.
So we all know what a square looks like, but can we find all possible squaresthat can be formed from a set of stars in a night sky? To make the problemeasier, we will assume that the night sky is a 2-dimensional plane, and eachstar is specified by its x and y coordinates.
Input
The input consists of a numberof test cases. Each test case starts with the integer n (1 <= n <= 1000)indicating the number of points to follow. Each of the next n lines specify thex and y coordinates (two integers) of each point. You may assume that thepoints are distinct and the magnitudes of the coordinates are less than 20000.The input is terminated when n = 0.
Output
For each test case, print on aline the number of squares one can form from the given stars.
Sample Input
4
1 0
0 1
1 1
0 0
9
0 0
1 0
2 0
0 2
1 2
2 2
0 1
1 1
2 1
4
-2 5
3 7
0 0
5 2
0
Sample Output
1
6
1
题目简介:给出n个点的坐标,判断这些点一共可以组成多少个正方形。
方法:哈希表。
正方形点的求法。已知(x1,y1),(x2,y2)。
则
x3 = x1+(y1-y2);y3 = y1-(x1-x2);
x4 = x2+(y1-y2);y4 = y2-(x1-x2);
或
x3 = x1-(y1-y2); y3 = y1+(x1-x2);
x4 = x2-(y1-y2); y4 = y2+(x1-x2);
用(N.x*2+N.y+60000)%60000处理冲突。
#include<iostream>#include<cstdio>#include<list>using namespace std;class node{public:int x, y;}num[1010];class HASH{public:list<node> Hash[60000];void Insert(node N){Hash[(N.x*2+N.y+60000)%60000].push_back(N);}void Clear(){for(int i = 0;i<60000;i++){Hash[i].clear();}} int find(node N){int target = (N.x*2+N.y+60000)%60000;for(list<node>::iterator it = Hash[target].begin();it!=Hash[target].end();it++){if(it->x==N.x&&it->y==N.y){return 1;}}return 0;}}My_hash;int main(){int n, i, j;while(scanf("%d",&n),n){My_hash.Clear();for(i = 0;i<n;i++){node N;scanf("%d%d",&N.x, &N.y);num[i] = N;My_hash.Insert(N);}int count = 0;for(i = 0;i<n;i++){for(j = i+1;j<n;j++){node t1, t2;t1.x=num[i].x + num[i].y - num[j].y;t1.y=num[i].y - num[i].x + num[j].x;t2.x=num[j].x + num[i].y - num[j].y;t2.y=num[j].y - num[i].x + num[j].x;if(My_hash.find(t1)&&My_hash.find(t2)){count++;}t1.x=num[i].x - num[i].y + num[j].y;t1.y=num[i].y + num[i].x - num[j].x;t2.x=num[j].x - num[i].y + num[j].y;t2.y=num[j].y + num[i].x - num[j].x;if(My_hash.find(t1)&&My_hash.find(t2)){count++;}}}printf("%d\n",count/4);}return 0;}
- poj 2002 Squares
- poj 2002 Squares
- POJ 2002 Squares
- poj 2002 Squares
- poj 2002 Squares
- poj-2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- BIT1033 POJ 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares Hash
- POJ 2002 Squares
- poj 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- poj-2002-Squares--二分
- poj 2002 Squares
- SQL Server2008附加数据库失败 错误号:5120
- Uva - 10859 - Placing Lampposts(树形dp)
- Java程序员从笨鸟到菜鸟之(二十一)java过滤器和监听器详解
- css background之设置图片为背景技巧
- iphone 推送服务--Apple Push Notification Service
- POJ 2002 Squares
- Java程序员从笨鸟到菜鸟之(二十二)华山论session和cookie机制
- 如何查询当前环境下,Qt所支持的字体的名称
- Java程序员从笨鸟到菜鸟之(二十三)常见乱码解决以及javaBean基础知识
- 用QT 的QPalette来改变窗体的外观
- shell脚本学习相关
- Java程序员从笨鸟到菜鸟之(二十四)Xml基础详解和DTD验证
- SSH select标签的回显:
- 嵌入式linux内核中常见内存分配