程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 2002 點的hash

POJ 2002 點的hash

編輯:C++入門知識

Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 15489 Accepted: 5864

Description

A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however, as a regular octagon also has this property.

So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x and y coordinates.

Input

The input consists of a number of 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 the x and y coordinates (two integers) of each point. You may assume that the points 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 a line 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


二維平面給定一堆點,求可以組成正方形的個數,點數為1000,因此不能枚舉四個點判斷,

比較優化的方法是將所有點hash,然後枚舉兩個點,計算出另外兩個點的坐標,然後在hash表裡查找,最後結果除以4,因為每一條邊被統計了4次。

代碼:

/* ***********************************************
Author :_rabbit
Created Time :2014/5/11 8:26:00
File Name :20.cpp
************************************************ */
#pragma comment(linker, "/STACK:102400000,102400000")
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pi acos(-1.0)
typedef long long ll;
const int maxn=100009;
class HASH{
	public:
		struct Node{
			int next,to;
			Node(int _next=0,int _to=0){
				next=_next;to=_to;
			}
		}edge[10010];
		int tol,head[maxn+10];
		void clear(){
			memset(head,-1,sizeof(head));tol=0;
		}
		void add(int x,int y){
			if(find(x,y))return;
			int t=(x+maxn)%maxn;
			edge[tol]=Node(head[t],y);
			head[t]=tol++;
		}
		int find(int x,int y){
			int t=(x+maxn)%maxn;
			for(int i=head[t];i!=-1;i=edge[i].next)
				if(edge[i].to==y)
					return 1;
			return 0;
		}
}mi;
int x[1010],y[1010];
int main()
{
     //freopen("data.in","r",stdin);
     //freopen("data.out","w",stdout);
     int n;
	 while(~scanf("%d",&n)&&n){
		 mi.clear();
		 for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved