poj3349 Snowflake Snow Snowflakes
吼哇!
关于开散列哈希:
哈希就是把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的更多相关文章
- [poj3349]Snowflake Snow Snowflakes(hash)
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 37615 Accepted: ...
- POJ--3349 Snowflake Snow Snowflakes(数字hash)
链接:Snowflake Snow Snowflakes 判断所有的雪花里面有没有相同的 每次把雪花每个角的值进行相加和相乘 之后hash #include<iostream> #incl ...
- poj3349 Snowflake Snow Snowflakes【HASH】
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 49991 Accep ...
- POJ3349 Snowflake Snow Snowflakes (hash
Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 48624 Accep ...
- POJ3349 Snowflake Snow Snowflakes (JAVA)
首先声明代码并没有AC,内存超了 但我对此无能为力,有没有哪位大神好心教一下怎么写 哈希,然后比较花瓣数组,这些应该都没问题才对..唉.. 贴MLE代码 import java.util.*; pub ...
- poj3349 Snowflake Snow Snowflakes —— 哈希表
题目链接:http://poj.org/problem?id=3349 题意:雪花有6个瓣,有n个雪花,输入每个雪花的瓣长,判断是否有一模一样的雪花(通过旋转或翻转最终一样,即瓣长对应相等).如果前面 ...
- POJ3349: Snowflake Snow Snowflakes(hash 表)
考察hash表: 每一个雪花都有各自的6个arm值,如果两个雪花从相同或者不同位置开始顺时针数或者逆时针数可以匹配上,那么这两个雪花就是相等的. 我们采用hash的方法,这样每次查询用时为O(1),总 ...
- POJ3349 Snowflake Snow Snowflakes(哈希)
题目链接. 分析: 哈希竟然能这么用.检查两片雪花是否相同不难,但如果是直接暴力,定会超时.所以要求哈希值相同时再检查. AC代码: #include <iostream> #includ ...
- POJ3349 Snowflake Snow Snowflakes 【哈希表】
题目 很简单,给一堆6元组,可以从任意位置开始往任意方向读,问有没有两个相同的6元组 题解 hash表入门题 先把一个六元组的积 + 和取模作为hash值,然后查表即可 期望\(O(n)\) #inc ...
随机推荐
- 372.Definition of ListNode
单项列表只能把后一个node中的所有数据copy到当前node再delete后一node. /** * Definition of ListNode * class ListNode { * publ ...
- git基本操作1
1.创建版本库 在文件夹下,打开Git Bash Here ,然后执行git init,文件夹中会多出.git文件夹.(.git可能是隐藏的) 2.创建a.txt vim a.txt ,并添加到版本 ...
- C# 将当前应用程序写入到注册表开机启动项中
在使用C#进行应用程序的开发过程中,经常有一个需求就是让应用程序开机后自动启动,这个是一个很常见的需求,最常规的做法(这里以Win7操作系统为例),打开:开始=>所有程序=>启动文件夹(路 ...
- X5中CSS设置
颜色渐变 position:absolute;left:0;top:40%; 效果图 点击导航按钮变化颜色 1.设置按钮class为 btn-link(超链接) 2.为每一个导航按钮增加属性id 3. ...
- EmpireCMS的使用
1.下载安装empirecms 下载完成后解压将upload目录整体上传到服务器,并更名为empirecms_test 更改目录文件的权限: chmod -R 777 empirecms_test 配 ...
- Object...与Object[]使用的一点区别和记录
Object是所有类的基类 简述: Object ...objects(称为可变个数的形参)这种参数定义是在不确定方法参数的情况下的一种多态表现形式.Java可变参数,即这个方法可以传递多个参数,这个 ...
- 初识Xml。
/* * 一.Xml? * * 1.是什么? * Extensible markup Language 可拓展标记性语言 * 功能是 储存数据 * 1.配置文件 * 2.在网络中传输数据 * xml和 ...
- Java连接RabbitMQ之创建连接
依赖包: <dependencies> <dependency> <groupId>junit</groupId> <artifactId> ...
- ceph 重启,停止,开始
systemctl restart ceph-mon@mon-node3 systemctl stop ceph-mon@mon-node3 systemctl start ceph-mon@mon- ...
- 洛谷P1501 Tree II
LCT 还是LCT的板子,下放标记和那道线段树2一样,先放乘..之前用char忘记getchar,调了好久... 注意开long long!! #include <bits/stdc++.h&g ...