POJ 2002 Squares
来源:互联网 发布:mounty11 for mac下载 编辑:程序博客网 时间:2024/04/28 17:03
Squares
Time Limit: 3500MS Memory Limit: 65536KTotal Submissions: 14440 Accepted: 5441
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
分析:hash。
Code:
#include <algorithm>#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <vector>#include <queue>#include <cmath>#include <map>#include <set>#define eps 1e-7#define LL long long#define pb push_back#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))using namespace std;const int MOD=40000;struct node{ int x,y;}p[1005];int Hash[MOD+MOD],next[1005];int n;bool cmp(node a,node b){ if(a.x==b.x) return a.y>b.y; return a.x<b.x;}bool find(int x,int y){ int tmp=x+y; if(tmp<0) tmp+=MOD; for(int i=Hash[tmp];i!=-1;i=next[i]){ if(p[i].x==x&&p[i].y==y) return true; } return false;}int main(){ while(scanf("%d",&n),n){ for(int i=0;i<n;i++) scanf("%d %d",&p[i].x,&p[i].y); sort(p,p+n,cmp); memset(Hash,-1,sizeof(Hash)); for(int i=0;i<n;i++){ int tmp=p[i].x+p[i].y; if(tmp<0) tmp+=MOD; next[i]=Hash[tmp]; Hash[tmp]=i; } int ans=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ int a=p[i].x+p[i].y-p[j].y; int b=p[i].y+p[j].x-p[i].x; if(!find(a,b)) continue; a=p[j].x+p[i].y-p[j].y; b=p[j].y+p[j].x-p[i].x; if(!find(a,b)) continue; ans++; } } printf("%d\n",ans/2); } return 0;}
- 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
- POJ 2002 Squares
- poj 2002 Squares
- POJ 2002 Squares
- POJ 2002 Squares
- poj-2002-Squares--二分
- poj 2002 Squares
- JS 两个字符串时间的天数差
- synchronized与static synchronized 的区别
- jquery总结
- cvCalcHist 直方图
- 学习插件架构(二)
- POJ 2002 Squares
- Linux cut用法
- 如何设置共享文件夹
- yum报错"This system is not registered with RHN"
- 1
- spring aop xml方式的配置案例 以及 annotation方式的配置aop
- FPGA与CPLD的区别
- 如何利用远程桌面连接CentOS的Desktop版本
- 安卓开发--运行你的APP