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 ...
随机推荐
- matlab2013a for linux/Ubuntu 安装步骤及创建快捷方式(ubuntu14.04下安装)
1.挂载安装镜像:sudo mount -o loop myfile.iso /media/mnt #挂载ISO文件,使用參数 -o loop mnt为已经建立好的文件夹. 2.运行安装 ...
- Java编程思想第四版*第七章*个人练习
欢迎加群:239063848 成团的笔记:该组仅用于技术共享和交流,问题和答案公布 潘基聊天.禁止广告.禁止招聘-- 练习1:(2)创建一个简单的类.第二个类中,将一个引用定义为第一个类的对象.运用惰 ...
- 新型信用卡MasterPass
Xsolla与masterpass合作.提供新型支付方式 "电子支付的未来在这里. "在万事达卡宣布发行一种全新的被称为MasterPass的支付解决方式的两年后.从2014年底開 ...
- java24 手写服务器最终版本
手写服务器最终版本; <?xml version="1.0" encoding="UTF-8"?> <web-app> <serv ...
- LINUX 系统备份
系统备份是系统管理工作中十分重要的一个环切,本文详细介绍了各种Linux系统的备份方法,相信对大家的日常管理工作有所帮助. 备份是一项重要的工作,但是很多人没有去做.一旦由于使用不当造成数据丢失,备份 ...
- 开启、关闭数据库mysql
1.命令行 net start mysql net start mysql 2.点控制面板→管理→服务 招到mysql 3.找到安装目录下的bin目录
- 手机端轻应用模拟原生的下拉刷新效果(JavaScript)
方案一:使用iscoll等有下拉功能的框架. 分析:因为项目的结构已经基本完成,再使用框架,会与原来的结构互相影响: 方案二:用JavaScript.Jquery写. 分析:可能没有直接使用框架的效果 ...
- eclipse引入jar类包的源代码
为了方便查看源代码,有时候需要对jar类包,引入源代码. 下载源代码 源代码是zip或者rar的压缩包 引入到项目中
- css所有选择器的详解
----------------------------------------css 选择器---------------------------------------- 1,组合选择器: 1)e ...
- jsp文件怎么打开呢
jsp是一种嵌入式网页脚本,正常情况下可以用记事本等文本工具直接打开,也可用DREAMWEAVER等网页设计工具友好编辑.不过这样只能看到程序的源代码.当然,我们也可以用IE等浏览器直接打开浏览,前提 ...