吼哇!

关于开散列哈希

哈希就是把xxx对应到一个数字的东西,可以理解成一个map<xxx, int>(是不是比喻反了)

我们要设计一个函数,这个函数要确保同一个东西能得到相同的函数值(废话)

然后在函数值域上开邻接表即可。

本人第一次写hash,还不是经典字符串hash而是雪花雪雪花(......)

那么接下来欣赏丑陋不堪的hash吧!

(poj上C++过不了,RE,G++就过了,有剧毒)

 #include <cstdio>
const int N = , P = ; int a[]; struct Snowflake {
int a[];
bool operator == (const Snowflake &x) const {
for(int i = ; i < ; i++) { /// 从i/0开始
bool f = ;
for(int j = ; j < ; j++) {
if(a[(j + i) % ] != x.a[j]) {
f = ;
}
}
if(f) return ;
f = ;
for(int j = ; j < ; j++) {
if(a[(j + i) % ] != x.a[( - j) % ]) {
f = ;
}
}
if(f) return ;
}
return ;
}
}s[N]; struct Hashnode {
int p, nex;
}h[N]; int top;
int head[P]; inline int gethash(Snowflake x) {
int ans = ;
for(int i = ; i < ; i++) {
ans = (ans + x.a[i]) % P;
ans = (ans + (x.a[i] % P) * (x.a[(i + ) % ] % P)) % P;
}
return ans;
} inline bool inserthash(int x) {
int val = gethash(s[x]);
for(int i = head[val]; i; i = h[i].nex) {
if(s[x] == s[h[i].p]) return ;
} top++;
h[top].p = x;
h[top].nex = head[val];
head[val] = top;
return ;
} int main() {
//freopen("in.in", "r", stdin);
int n, x;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
for(int j = ; j < ; j++) {
scanf("%d", &s[i].a[j]);
}
if(inserthash(i)) {
printf("Twin snowflakes found.\n");
return ;
}
}
printf("No two snowflakes are alike.\n");
return ;
}

AC代码

poj3349 Snowflake Snow Snowflakes的更多相关文章

  1. [poj3349]Snowflake Snow Snowflakes(hash)

    Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...

  2. POJ--3349 Snowflake Snow Snowflakes(数字hash)

    链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...

  3. poj3349 Snowflake Snow Snowflakes【HASH】

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 49991   Accep ...

  4. POJ3349 Snowflake Snow Snowflakes (hash

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 48624   Accep ...

  5. POJ3349 Snowflake Snow Snowflakes (JAVA)

    首先声明代码并没有AC,内存超了 但我对此无能为力,有没有哪位大神好心教一下怎么写 哈希,然后比较花瓣数组,这些应该都没问题才对..唉.. 贴MLE代码 import java.util.*; pub ...

  6. poj3349 Snowflake Snow Snowflakes —— 哈希表

    题目链接:http://poj.org/problem?id=3349 题意:雪花有6个瓣,有n个雪花,输入每个雪花的瓣长,判断是否有一模一样的雪花(通过旋转或翻转最终一样,即瓣长对应相等).如果前面 ...

  7. POJ3349: Snowflake Snow Snowflakes(hash 表)

    考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...

  8. POJ3349 Snowflake Snow Snowflakes(哈希)

    题目链接. 分析: 哈希竟然能这么用.检查两片雪花是否相同不难,但如果是直接暴力,定会超时.所以要求哈希值相同时再检查. AC代码: #include <iostream> #includ ...

  9. POJ3349 Snowflake Snow Snowflakes 【哈希表】

    题目 很简单,给一堆6元组,可以从任意位置开始往任意方向读,问有没有两个相同的6元组 题解 hash表入门题 先把一个六元组的积 + 和取模作为hash值,然后查表即可 期望\(O(n)\) #inc ...

随机推荐

  1. php foreach跳出本次/当前循环与终止循环方法

    continue:跳出本次循环 break:终止循环 exit:用来结束程序执行 return: 用来结束一段代码     $arr= array('le','yang','jun','lecode' ...

  2. Jenkins系统上的时间不正确问题

    很简单,点击系统管理,选择执行脚本命令: 打开 [系统管理]->[脚本命令行]运行下面的命令 System.setProperty('org.apache.commons.jelly.tags. ...

  3. 源码追踪,解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries.问题

    在windows系统本地运行spark的wordcount程序,会出现一个异常,但不影响现有程序运行. >>提君博客原创  http://www.cnblogs.com/tijun/  & ...

  4. python数据结构与算法第三天【时间复杂度计算方法】

    最优时间复杂度(不可靠) 最坏时间复杂度(保证) 平均时间复杂度(平均状况) 不同语句的时间复杂度: (1)顺序语句:使用加法 (2)循环语句:使用乘法 (3)分支语句:使用坏时间复杂度 例如:如下代 ...

  5. 接触Struts2的ModelDriven<>接口

    最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录 ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象 参考他人 ...

  6. 二、启用Docker支持

    一.使用

  7. Microsoft Azure Machine Learning Studio

    随着机器学习(ML)成为软件行业的主流,重要的是要了解它的工作原理,并将其置于开发栈中.了解如何为您的应用程序构建ML服务,您可以确定您的ML应用程序中的机会,实施ML,并与您的团队的ML专业人士清楚 ...

  8. 前端传递给后端且通过cookie方式,尽量传递id

    前端传递给后端且通过cookie方式,尽量传递id

  9. C# 调用短信接口

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  10. linq之group by 的使用

    group by var list = from s in _sysBll.GetList(s => s.ParamID == "TraSchType" && ...