poj2002——Squares(hash)
来源:互联网 发布:artrage for mac 中文 编辑:程序博客网 时间:2024/06/07 14:42
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
思想是先找出两个点,看另外两个点是否存在。
已知: (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)
#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <set>#include <math.h>#include <algorithm>#include <queue>#include <iomanip>#include <map>#define INF 0x3f3f3f3f#define MAXN 10005#define Mod 20007using namespace std;int n,head[20007],next[20007],m;struct Node{ int x,y;};Node star[3000];void add(int i){ int key=(star[i].x*star[i].x+star[i].y*star[i].y)%Mod; next[m]=head[key]; star[m].x=star[i].x; star[m].y=star[i].y; head[key]=m++;}int find(int x,int y){ int key=(x*x+y*y)%Mod; for(int i=head[key];i!=-1;i=next[i]) { if(star[i].x==x&&star[i].y==y) return i; } return -1;}bool cmp(Node a,Node b){ if(a.x!=b.x) return a.x<b.x; return a.y<b.y;}int main(){ while(~scanf("%d",&n)&&n) { memset(head,-1,sizeof(head)); memset(next,0,sizeof(next)); m=1005; for(int i=0; i<n; ++i) { scanf("%d%d",&star[i].x,&star[i].y); add(i); } sort(star,star+n,cmp); int ans=0; for(int i=0;i<n;++i) { for(int j=i+1;j<n;++j) { int x1,y1,x2,y2; x1=star[i].x-star[j].y+star[i].y; y1=star[i].y+star[j].x-star[i].x; if(find(x1,y1)==-1) continue; x2=star[j].x-star[j].y+star[i].y; y2=star[j].y+star[j].x-star[i].x; if(find(x2,y2)==-1) continue; ans++; } } printf("%d\n",ans/2); } return 0;}
- poj2002——Squares(hash)
- POJ2002 Squares(hash)
- poj2002 Squares(hash)
- poj2002——Squares
- poj2002——Squares
- POJ2002-Squares-hash+枚举+几何
- POJ2002&&POJ3432 Squares(二分||hash)
- POJ2002 Squares
- poj2002 Squares
- poj2002 Squares
- POJ2002-Squares
- POJ2002:Squares
- Squares-POJ2002
- Squares-POJ2002
- poj2002 Squares
- POJ2002-Squares
- ZOJ2347 Squares (POJ2002 二分查找)
- poj2002 hash
- Failed toload JavaHL Library解决方法
- 生命不只有
- juicer——Demo
- 一条界破青山色:探究OpenStack落地企业之道
- Android刷机报错failed to mount /cache (No such device)
- poj2002——Squares(hash)
- 单例模式学习
- C++内存管理
- Git学习文档之一 学习文档-上传下载
- AutoCAD 2018安装破解
- java虚拟机
- NOIP 2016 换教室
- lintcode——将二叉树拆成链表
- 冒泡排序算法与选择排序算法分析(C描述)