吼哇!

关于开散列哈希

哈希就是把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. Latex常用软件

    Linux texMaker sudo apt-get install texlive-full sudo apt-get install texmaker

  2. 游标cursor案例

  3. vant的坑

    1.轮播图设置, .img { width: 100%; height: 100%; object-fit: cover; touch-action: none; } 如果不设置不能达到 保持纵横比缩 ...

  4. Linux 文件及目录管理命令基础

    pwd   显示当前所在目录 cd 切换目录 cd 命令语法 cd [选项] 目录 cd 的常用选项: cd ~ /cd 切换到当前用户的加目录 cd . 保持当前目录不变 cd .. 切换到上级目录 ...

  5. 在页面中有overflow-y:auto属性的div,当出现滚动条,点击返回顶部按钮,内容回这个div最顶部

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Puppet日常总结

    在工作中常常会有这样一种需求:某几个人需要某些测试服务器的root权限.比如,开发部门的张三,李四,王五,赵六需要rsync服务器的root权限.有些同学会说那直接 visudo在里面添加几个人不就行 ...

  7. 莫烦scikit-learn学习自修第四天【内置训练数据集】

    1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from sklearn import datasets from sklearn.linea ...

  8. 一、关于a标签伪类中的visited不起作用问题

    一.代码示范 <html> <head> <title>伪类超链接</title> <!--<link href="./test. ...

  9. 天虎云商wap和微信话项目总结

    1:架构:以后要采用项目分模块的方式写代码了,不能写一个公用的controller包,每个模块分包,分别建立service,dao,但是模块同级的有个功能的baseDao,        BaseSe ...

  10. opencv imdecode和imencode用法

    主要是对内存数据自动编解码 string fname = "D:/image.jpg"; //! 以二进制流方式读取图片到内存 FILE* pFile = fopen(fname. ...