POJ 2002 点的hash
来源:互联网 发布:怎么关闭百度推荐 知乎 编辑:程序博客网 时间:2024/06/06 01:08
Squares
Time Limit: 3500MS Memory Limit: 65536KTotal 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.
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
二维平面给定一堆点,求可以组成正方形的个数,点数为1000,因此不能枚举四个点判断,
比较优化的方法是将所有点hash,然后枚举两个点,计算出另外两个点的坐标,然后在hash表里查找,最后结果除以4,因为每一条边被统计了4次。
代码:
/* ***********************************************Author :_rabbitCreated Time :2014/5/11 8:26:00File Name :20.cpp************************************************ */#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <iostream>#include <algorithm>#include <sstream>#include <stdlib.h>#include <string.h>#include <limits.h>#include <string>#include <time.h>#include <math.h>#include <queue>#include <stack>#include <set>#include <map>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<n;i++){ scanf("%d%d",&x[i],&y[i]); mi.add(x[i],y[i]);// cout<<"hhh "<<endl; } ll ans=0; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++){// cout<<"ddd"<<endl; ll x3,y3,x4,y4; x3=x[i]+(y[j]-y[i]);y3=y[i]-(x[j]-x[i]); x4=x[j]+(y[j]-y[i]);y4=y[j]-(x[j]-x[i]); if(mi.find(x3,y3)&&mi.find(x4,y4))ans++; x3=x[i]-(y[j]-y[i]);y3=y[i]+(x[j]-x[i]); x4=x[j]-(y[j]-y[i]);y4=y[j]+(x[j]-x[i]); if(mi.find(x3,y3)&&mi.find(x4,y4))ans++; // cout<<"ddd"<<endl; } ans/=4; cout<<ans<<endl; } return 0;}
0 0
- POJ 2002 点的hash
- POJ 2002 Squares 计算集合 点的hash
- poj 2002 正方形个数 (对点的hash 存储)
- poj 2002 Squares(枚举+点hash)
- POJ-2002,3432(搜点,hash或二分)
- poj 2002 Squares (hash 拉链 点集)
- POJ 2002 hash 题目
- POJ 2002 (hash)
- poj 2002 -- hash
- POJ 2002 (hash + 几何)
- POJ 2002 hash+枚举
- POJ 2002 Squares Hash
- POJ 2002 Squares -- Hash
- poj 2002 Squares,hash
- POJ 2002 Squares (Hash)
- poj 2002 Squares Hash
- poj 2002 hash
- POJ 2002 Squares hash
- MFC 多线程下使用UpdateData的方法
- C++11系列-什么是C++11
- 如何将迅雷设为默认下载器
- [字典树] poj 2418 Hardwood Species
- Android开发之自定义TabHost文字及背景(源代码分享)
- POJ 2002 点的hash
- Xcode做ios开发编译成功之后模拟器黑屏
- 【Hibernate步步为营】--核心对象+持久对象全析(二)
- Asp.Net页面生命周期 和 IIS请求
- 获得程序运行时间
- QT 之 QFont 类 的常用的函数
- 数据结构 DFS
- Ubuntu下解压缩rar的方法
- Java正确处理InterruptedException的方法