吼哇!

关于开散列哈希

哈希就是把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. JavaMail入门第一篇 邮件简介及API概述

    现如今,电子邮件在我们的生活当中扮演着越来越重要的角色,我们每个人几乎都会与其打交道(至少时不时我们都会接收到莫名其妙的垃圾邮件),在工作中,使用邮件进行交流沟通,可以使我们的工作有迹可循,也显的较为 ...

  2. zookeeper的安装和启动教程

    zookeeper的安装和启动 zookeeper安装包所在目录: 上传文件到虚拟机.现在本地新建一个目录setup,将zookeeper压缩包复制进去. ALT+P打开一个标签,操作如下put命令. ...

  3. Vagrant系列(二)----Vagrant的配置文件Vagrantfile详解

    一.简介 在我们的工作目录下有一个Vagrantfile文件,里面包含有大量的配置信息,通过它可以定义虚拟机的各种配置,如网络.内存.主机名等,主要包括三个方面的配置,虚拟机的配置.SSH配置.Vag ...

  4. oss上传和下载的笔记

    <<<<<<<<<对oss操作,上传文件>>>>>>>>>>>>>& ...

  5. Java变量类型识别的3种方式

    内容导览 反射方式,成员变量的类型判断 isInstance用法 利用泛型识别类型 测试类: package com.cxyapi.oo; import java.util.Date; import ...

  6. 小米Note3 MIUI9可以用的XPosed框架

    资源来自论坛里的:http://www.miui.com/thread-6449305-1-1.html 首先需要刷入TWRP,资源在这个帖子里:http://www.miui.com/thread- ...

  7. Windows下安装Ubuntu 16.04双系统

    本文已有更新:新文章 [2016-05-09 更新说明: ①:我原本写的Ubuntu 16.04安装博客中在安装系统时,在引导项部分,有一点问题没有注意到,感谢@小段阿誉的指出,在下面我有了说明: ② ...

  8. Dijkstra—校园景点游览问题

    #include<iostream> #include<cstdio> #include<cstring> #define MAX 9999999 using na ...

  9. win10安装MySql 5.7.23

    下载安装 因为Django2.1不再支持MySQL5.5,这里需要重新安装一下MySQL 首先去官网下载 这里使用的是msi版本 https://dev.mysql.com/downloads/win ...

  10. Matplotlib学习---用matplotlib画热图(heatmap)

    这里利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://datasets.flowingdata.com/ppg2008.csv ...