Squares<哈希>
2013-08-21 16:06
99 查看
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
Sample Output
View Code
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 就是看看给出的点能组成几个正方形; 不要四个四个的组合,想也会超时,任意两个组合,然后计算出另外两个点; 再去查询是否存在;结果要除以4的;
#include<iostream> #include<cstring> #include<cstdio> using namespace std; bool x[5000][5000];//我才不告诉你其实数据是-2000--2000 int si[1010],sj[1010]; int f(int a,int b) { if(x[a+2500][b+2500]) return 1; return 0; } int main() { int a,b,i,j,n,sum; int x1,y1,x2,y2,x3,y3,x4,y4; while(scanf("%d",&n)&&n) { sum=0; memset(x,0,sizeof(x)); for(i=0; i<n; i++) { scanf("%d %d",&a,&b); si[i]=a; sj[i]=b; x[a+2500][b+2500]=1; } for(i=1; i<n; i++) { x1=si[i]; y1=sj[i]; for(j=0; j<i; j++) { x2=si[j]; y2=sj[j]; x3=x1+(y1-y2);//计算剩下两个点 y3= y1-(x1-x2); x4=x2+(y1-y2); y4= y2-(x1-x2); if(f(x3,y3)&&f(x4,y4)) sum++; x3=x1-(y1-y2); y3= y1+(x1-x2); x4=x2-(y1-y2); y4= y2+(x1-x2); if(f(x3,y3)&&f(x4,y4)) sum++; } } printf("%d\n",sum/4);//记得除以4 } return 0; }
View Code
相关文章推荐
- [c++11]hash<T>哈希结构模板
- 哈希的原理和代价<转>
- POJ 3349 Snowflake Snow Snowflaks <数的哈希>
- python-04<关于字典:键必须是可哈希的>
- POJ 2503 Babelfish <串的哈希>
- 从零开始学_JavaScript_系列(12)——jquery<2>(高度自适应,哈希地址及检测,单页面技术)
- JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)
- 人与自然<哺乳动物>
- <c:url...>
- 安装sybase出现 找不到JVM错误请使用选项 -is:javahome<JAVA HOME DIR>
- aspx页面中<input>中特殊字符导致提交不安全信息问题的解决方案
- Android开源中国客户端学习 微博分享模块 <8>
- python {File "<stdin>", line 1} error
- logback 常用配置详解(三) <filter>
- Tensorflow整理<4>.MNIST高级教程
- &lt;祝我生日快乐&gt; 的词曲写的真好..杰伦果然是我心中的偶像
- 架设服务器FTP,使得宿机可访问并修改服务器上的文件<作者:gaoming13>
- android.graphics.Bitmap.Config<ALPHA_8, ARGB_4444,ARGB_8888,RGB_565>
- List<T>集合类
- 算法之旅,直奔<bitset>之三 test