POJ 2002 Squares 哈希
题目链接: http://poj.org/problem?id=2002
#include <stdio.h>
#include <string.h> const int prime = ; struct Hash_table
{
int x, y;
struct Hash_table *next;
}*Hash[prime]; void Hash_insert(int x, int y)
{
int key = (x + y) % prime;
if(Hash[key] == NULL)
{
Hash[key] = new Hash_table;
Hash[key]->x = x;
Hash[key]->y = y;
Hash[key]->next = NULL;
return;
}
struct Hash_table *p = Hash[key]; //必须注意!下面几行一定是p->next,如果改成:
/*
while(p != NULL)
p = p->next;
p = new Hash_table;
p->x = x;
p->y = y;
p->next = NULL;
*/
//是绝对不行的,因为这里调试了半天了。。。。。。
//正解如下:
while(p->next != NULL)
p = p->next;
p->next = new Hash_table;
p->next->x = x;
p->next->y = y;
p->next->next = NULL;
} bool Hash_search(int x, int y)
{
int key = (x + y) % prime;
struct Hash_table *p = Hash[key];
while(p != NULL)
{
if(p->x == x && p->y == y)
return ;
p = p->next;
}
return ;
} int main()
{
int n, tx, ty, x[], y[];
int x3, x4, y3, y4;
while(scanf("%d", &n) != EOF && n)
{
memset(Hash, , sizeof(Hash));
for(int i = ; i < n; i++)
{
scanf("%d %d", &tx, &ty);
x[i] = tx + ;
y[i] = ty + ;
Hash_insert(x[i], y[i]);
}
int ans = ;
for(int i = ; i < n; i++)
{
for(int j = ; j < n; j++)
{
if(j == i)continue;
x3 = x[i]+(y[i]-y[j]);
y3 = y[i]-(x[i]-x[j]);
x4 = x[j]+(y[i]-y[j]);
y4 = y[j]-(x[i]-x[j]);
if(Hash_search(x3, y3) && Hash_search(x4, y4))
ans++;
}
}
printf("%d\n", ans/);
}
return ;
}
POJ 2002 Squares 哈希的更多相关文章
- POJ 2002 Squares【值得摸索的一道二分+点旋转】
id=2002">Squares 很好的一道二分,事实上本来我是没有思路的,看了基神的题解之后才似乎明确了点. 题意:给出最多有1000个点,问这些点能够组成多少个正方形 分析:先想想 ...
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...
- poj 2002 Squares 几何二分 || 哈希
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 15137 Accepted: 5749 Descript ...
- POJ 2002 Squares 几何, 水题 难度: 0
题目 http://poj.org/problem?id=2002 题意 已知平面内有1000个点,所有点的坐标量级小于20000,求这些点能组成多少个不同的正方形. 思路 如图,将坐标按照升序排列后 ...
- POJ 2002 Squares [hash]
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 16631 Accepted: 6328 Descript ...
- POJ 2002 Squares 数学 + 必须hash
http://poj.org/problem?id=2002 只能说hash比二分快很多.随便一个hash函数都可以完爆二分. 判断是否存在正方形思路如下: 1.枚举任意两个点,作为正方形的一条边,那 ...
- POJ 2002 Squares
二分.... Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 14530 Accepted: 5488 Descr ...
- PKU 2002 Squares(二维点哈希+平方求余法+链地址法)
题目大意:原题链接 给定平面上的N个点,求出这些点一共可以构成多少个正方形. 解题思路: 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标.对于特定 ...
- Squares - poj 2002(hash)
枚举两个点作为一条边,求出正方形的另外两个点,利用hash查找另外两个点. #include<stdio.h> #include<string.h> #include<s ...
随机推荐
- uuid_short() 源代码
/* uuid_short handling. The short uuid is defined as a longlong that contains the following bytes: B ...
- linux 修改文件时间
1.ls -l *.sh 2.touch -d "10/13/2013" *.sh [我想把所以的.sh文件修改到三个月前(2013年10月13)的时间.]3.ls -l *.sh ...
- HD1285(拓扑排序)
package cn.hncu.dataStruct.search.topSort; import java.util.Scanner; public class Hdu1285 { static S ...
- Asp.net上传出现“超过了最大请求长度”的问题解决方法
在开发ASP.NET网站后台管理系统时,我们可能会遇到这样的问题:上传大于4M的文件时,会提示错误:错误信息如下: 1.异常详细信息:超过了最大请求长度. 2.引发异常的方法:Byte[] GetEn ...
- Magento入门开发教程
Modules->模块 Controller->控制器 Model->模型 Magento是这个星球上最强大的购物车网店平台.当然,你应该已经对此毫无疑问了.不过,你可能还不知道,M ...
- 参加魅族 flyme 互联网编程大赛的一些感受
为期两天的 flyme 编程大赛已经结束了,自己也在这次大赛中深有感触,受益颇丰. 在这次大赛里,认识到了很多厉害的开发者,有单打独斗的,也有四五成群的.开幕致辞上看到很多非常有创意的点子,感觉每个队 ...
- (转)Asp.NetURL重写的一种方法
说到不用设置iis,主要是为了实现在虚拟主机或是拿不到iis操作限的时候,不能添加isap又想实现类似于静态化的程序实现方式,先声明,这里最终要实现的效果是,最终可以用 12345.html 替换 s ...
- js 函数命名
1 函数命名可以使用匿名: var f=function(x){return x*2;} 2 可以使用变量: function double(x){return x*2;} 二者区别:后者会绑定到与其 ...
- 项目由Windows2003 迁移到Windows 2008 过程,报 JS错误
这两天在做服务器迁移,遇到了一些小的问题,现在做个粗略的记录 原服务器环境:Windows 2003 现服务器环境:Windows 2008 其中SSB项目在迁移部署后发现,报 JS的错误. 我在想除 ...
- 火狐浏览器插件Modify Headers伪造IP地址
安装插件:先打开火狐浏览器 => 找到下载好的 modify_headers.xpi 插件文件 => 鼠标按住插件文件不放,拖拽到火狐浏览器界面 => 按提示重启浏览器 => ...