poj3349(哈希+链地址法)
给出N个六边形的6个边长,问其中是否有完全相同的两个六边形,完全相同包括边的长度和位置都要相同。边给出的顺序是逆时针或者顺时针的。
给每个6边形一个哈希值,方法是对6条边长度的平方和取模
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e6;
const int mod = ;//100W以内的大素数
typedef long long LL; int n;
char s[][];
int hash[maxn],next[maxn]; bool judge(int a,int b)
{
int i,j,k;
for(i = ; i < ; ++i)//串的起始位置
{
for(j = i,k = ; k < ; ++k,j = (j+)%)//顺时针
if(s[a][k] != s[b][j]) break;
if(k == ) return true;
for(j = i,k = ; k < ; ++k, j = (j+)%)//逆时针
if(s[a][k] != s[b][j]) break;
if(k == ) return true;
}
return false;
} int main()
{
//freopen("in","r",stdin);
scanf("%d",&n);
bool flag = false;
for(int i = ; i <= n; ++i)
{
int x = ,u;
for(int j = ; j < ; ++j)
{
scanf("%d",&s[i][j]);
x = (int)((x+(LL)s[i][j]*(LL)s[i][j])%mod);//防止溢出
}
u = hash[x];//hash【】里面存的是哈希值对应的某一行的行号
while(u){
if(judge(i,u)) {flag = true;break;}//只要u!=0,说明之前出现过这个hash值,则可能出现相同的六边形,判断一下
u = next[u];//沿着“链表”往下走
}
if(flag)break;
next[i] = hash[x];//类似链表的插入方法,把hash值相同的放在一起,方便以后用next可以遍历到所有hash相同的边
hash[x] = i;//更新表头
}
if(flag) printf("Twin snowflakes found.\n");
else printf("No two snowflakes are alike.\n");
}
poj3349(哈希+链地址法)的更多相关文章
- POJ 3007 Organize Your Train part II(哈希链地址法)
http://poj.org/problem?id=3007 题意 :给你一个字符串,让你无论从什么地方分割,把这个字符串分成两部分s1和s2,然后再求出s3和s4,让你进行组合,看能出来多少种不同的 ...
- C# Dictionary源码剖析---哈希处理冲突的方法有:开放定址法、再哈希法、链地址法、建立一个公共溢出区等
C# Dictionary源码剖析 参考:https://blog.csdn.net/exiaojiu/article/details/51252515 http://www.cnblogs.com/ ...
- PKU 2002 Squares(二维点哈希+平方求余法+链地址法)
题目大意:原题链接 给定平面上的N个点,求出这些点一共可以构成多少个正方形. 解题思路: 若正方形为ABCD,A坐标为(x1, y1),B坐标为(x2, y2),则很容易可以推出C和D的坐标.对于特定 ...
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...
- SWUST OJ 1012哈希表(链地址法处理冲突)
哈希表(链地址法处理冲突) 1000(ms) 10000(kb) 2676 / 6911 采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用链地址法.建立链表的时候采用尾插法 ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不 ...
- 链地址法实现HashMap
前注:本文介绍的HashMap并非Java类库的实现.而是根据哈希表知识的一个实现. 上文介绍了开放地址法实现HashTable,它的缺点是对hashCode映射为地址后如果出现重复地址,则会占用其他 ...
- 链地址法查找成功与不成功的平均查找长度ASL
晚上,好像是深夜了,突然写到这类题时遇到的疑惑,恰恰这个真题只让计算成功的ASL,但我想学一下不成功的计算,只能自己来解决了,翻了李春葆和严蔚敏的教材没有找到相关链地址法的计算,于是大致翻到两篇不错的 ...
- 哈希查找解决地址冲突的两种最常见方法(线性探测再散列,链地址法)C++实现
#include<iostream>#include<iomanip>using namespace std; typedef struct Node{ int data; s ...
随机推荐
- git hub 资料汇总
tobecrazy Selenium automation test framework https://github.com/tobecrazy/Demo Smartphone Test F ...
- 如何安装CocoaPods
转自 http://www.99css.com/1321/ 在 iOS 项目开发中,经常会用到第三方的源代码,CocoaPods 就是为了方便管理这些源码的工具. 在官方教程里面,安装看起来非常简单 ...
- GridView出现不完整--GridView删除滚动条
GridView显示不完毕的原因是由于,他的外层也套用了一个滑动的控件,解决办法就是重写GridView,是控制GridView不能滚动,就是写一个类继承GridView 代码例如以下 public ...
- 关于target is null for setProperty的问题总结
出现了这个问题,报错是 com.opensymphony.xwork2.ognl.OgnlValueStack WARN - Error setting expression 'costRecord ...
- Geodatabase - 判断是否处于编辑状态
Engine中提供IDatasetEdit来判断数据是否处于编辑状态,我们知道,在ArcMap中,进行编辑的不一定都是要素类,也可以是表,网络几何等.以下能在ArcMap中进行编辑的数据都实现了 ID ...
- js、java传值编码
一.请求使用post方法不需要考虑编码问题.二.前后台统一编码,支持中文,不考虑编码:tomcat utf-8编码三.前后台编码不统一 $.ajax({ url : &q ...
- ognl.NoSuchPropertyException(没有对应属性异常)
ognl.NoSuchPropertyException: com.xie.struts2.tags.modal.Student.sName(没有对应属性异常) at ognl.ObjectPrope ...
- Bootstrap定制(二)less基础语法
前几日花了一天去看less,这几日在捣鼓其他东西,项目也在有序的进行中,今天花点时间整理下less的基础语法,也分享实际中的一些经验,与众人共享. 本篇笔者以less的基础语法着手,并配合bootst ...
- gridview动态生成列
// 有连接的列 if (!String.IsNullOrWhiteSpace(filedModel.C_SqlDetail)) { HyperLinkField hyperColumn = new ...
- html 作业1
<body bgcolor="#000000" topmargin="200px" leftmargin="200px" text=& ...