Squares - POJ 2002 哈希
来源:互联网 发布:淘宝网络公司 编辑:程序博客网 时间:2024/05/22 02:17
Squares
Time Limit: 3500MS Memory Limit: 65536KTotal Submissions: 15556 Accepted: 5891
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
题意:这些点能够组成多少个正方形。
思路:枚举两个点,利用哈希判断另外两个点是否存在。
AC代码如下:
#include<cstdio>#include<cstring>#include<vector>using namespace std;struct node{ int x,y;};vector<node> hash[23333];int X[1010],Y[1010],times=0;int Hash(int x,int y){ int v=(x*237+y*237*237); if(v<0) v=0-v+23333; v%=23330; return v;}bool find(int x,int y){ int v=Hash(x,y); for(int i=0;i<hash[v].size();i++) { if(x==hash[v][i].x && y==hash[v][i].y) return true; } return false;}int main(){ int n,i,j,k,v,x1,x2,y1,y2,x,y; long long ans; while(~scanf("%d",&n) && n>0) { times++; ans=0; memset(hash,0,sizeof(hash)); for(i=1;i<=n;i++) { scanf("%d%d",&X[i],&Y[i]); v=Hash(X[i],Y[i]); node nod1; nod1.x=X[i]; nod1.y=Y[i]; hash[v].push_back(nod1); } for(i=1;i<n;i++) { for(j=i+1;j<=n;j++) { x=X[i]-X[j]; y=Y[i]-Y[j]; x1=X[i]+y; y1=Y[i]-x; x2=X[j]+y; y2=Y[j]-x; //printf("%d %d %d %d\n",x1,y1,x2,y2); if(find(x1,y1)&& find(x2,y2)) ans++; x1=X[i]-y; y1=Y[i]+x; x2=X[j]-y; y2=Y[j]+x; y2=Y[j]+x; //printf("%d %d %d %d\n",x1,y1,x2,y2); if(find(x1,y1)&& find(x2,y2)) ans++; // printf("%I64d\n\n",ans); } } printf("%I64d\n",ans/4); }}
0 0
- Squares - POJ 2002 哈希
- Squares - POJ 2002 哈希
- POJ 2002 Squares 哈希
- poj 2002 Squares 哈希
- POJ 2002 Squares 哈希
- poj- 2002-Squares-哈希|除法散列法
- 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
- 用alter关键字为Table增加新字段(sqlite)
- C#金额小写转大写
- 文件权限
- 设计模式之服务定位器模式
- sql函数:汉字转换为拼音
- Squares - POJ 2002 哈希
- php设计模式目录
- magento - 获取购物车中的总额,运费,tax ,count,grandtotal等
- SQL金额小写转大写
- HttpHelper类使用
- foreach 使用技巧
- adf中用inputFile上传文件到weblogic 方法1
- 133行代码实现质感地形(js,基于canvas)
- static的作用