(哈希)Squares (p2002)

来源:互联网 发布:淘宝psd素材免费下载 编辑:程序博客网 时间:2024/06/05 07:00

这个要注重二分的查找,,。先是二分查找的方法,

#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<vector>#include<cmath>#include<set>#include<cstring>using namespace std;#define N 1001struct my{int x,y;bool operator<(my b){if (b.x!=x)return x<b.x;else return y<b.y;}bool operator==(my b){if (b.x==x&&b.y==y)return true;elsereturn false;}void put(){cout<<x<<' '<<y<<"    ";}}p[N];int n;bool cmp(my a,my b){if (a.y!=b.y)return a.y<b.y;return a.x<b.x;}bool find (my a){int i,j,k;int s=0;int m;int e=n-1;while (s<=e){m=(e+s)/2;if (p[m]==a){return true;}else if (p[m].x>a.x||(p[m].x==a.x&p[m].y>a.y)){e=m-1;}elses=m+1;}return false;}int main(){freopen("in.txt","r",stdin);int i,j,k;while (cin>>n,n){for (i=0;i<n;i++){cin>>p[i].x>>p[i].y;}sort(p,p+n);int ans=0; my a,b;for (i=0;i<n;i++){for (j=i+1;j<n;j++){a.x=p[i].y-p[j].y+p[i].x;a.y=p[j].x-p[i].x+p[i].y;b.x=p[i].y-p[j].y+p[j].x;b.y=p[j].x-p[i].x+p[j].y;if (find(a)&&find(b))ans++;}}cout<<ans/2<<endl;}return 0;}








Squares
Time Limit: 3500MS Memory Limit: 65536KTotal Submissions: 11803 Accepted: 4319

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

41 00 11 10 090 01 02 00 21 22 20 11 12 14-2 53 70 05 20

Sample Output

161

原创粉丝点击