【POJ3349】snowflakes
这是一道可以练习哈希表的模板题。关于哈希表的操作均有涉及。
哈希函数的选取是这道题的关键。这道题的关键字是一个长度为6的序列,并且序列与开始顺序、时钟顺序均无关。
因此,采用哈希函数\(H[x]=\Sigma_{i=0}^5a[i]+\prod_{i=0}^5a[i]\),即:用加和乘的相加来进一步保证散列性。
另外,不能采用带“权值“的哈希函数,因为无序性。
另一个小知识点是顺时针和逆时针的操作,顺时针加 k 取模即可,逆时针正常来说减 k 取模即可,不过可能出现负数,因此再加上6。
代码如下
#include <cstdio>
using namespace std;
const int maxn=1e5+10;
const int mod=1e6+3;int n,d[6];
struct node{int nxt,snow[6];
}t[maxn];
int tot=1,head[mod];int calc(int p[6]){int add=0,mul=1;for(int i=0;i<6;i++){add=(add+p[i])%mod;mul=(long long)mul*p[i]%mod;}return (add+mul)%mod;
}bool equal(int a[6],int b[6]){for(int i=0;i<6;i++)for(int j=0;j<6;j++){bool f1=1,f2=1;for(int k=0;k<6;k++){if(a[(i+k)%6]^b[(j+k)%6])f1=0;if(a[(i+k)%6]^b[(j-k+6)%6])f2=0;}if(f1||f2)return 1;}return 0;
}bool insert(int a[6]){int u=calc(a);for(int i=head[u];i;i=t[i].nxt)if(equal(t[i].snow,a))return 1;++tot,t[tot].nxt=head[u],head[u]=tot;for(int i=0;i<6;i++)t[tot].snow[i]=a[i];return 0;
}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=0;j<6;j++)scanf("%d",&d[j]);if(insert(d))return puts("Twin snowflakes found."),0;}return puts("No two snowflakes are alike."),0;
}
转载于:https://www.cnblogs.com/wzj-xhjbk/p/9838581.html
【POJ3349】snowflakes相关推荐
- 【POJ3349】Snowflake Snow Snowflakes(哈希表判重,维护一个集合)
problem 有n片雪花,每片有6个脚,每个脚有一个长度. 两片雪花是一样的当且仅当每个脚的长度顺序都一样(顺逆时针和开始位置不管) 求n片雪花中是否有一样的雪花. solution 维护一个哈希表 ...
- 【JavaScript】下大雪
引用[JavaScript]满天星的代码,稍作修改的结果: function drawStars() {for (i = 1; i < 100; ++i) {ctx.fillText(" ...
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...
- 【C#】Out与ref是干什么的?
关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...
- 【软件工程】RUP与软件开发5大模型
软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...
- 【VB】学生信息管理系统5——数据库代码
这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...
- 白化(预处理步骤)【转】
白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...
最新文章
- 【300】◀▶ IDL - ENVI API
- 写给想用技术改变世界的年轻人-by 沃兹
- 【转载】企业级服务器设计与实现经验之插件系统基础篇
- TCP的拥塞控制(详解)
- ubuntu 安装 docky
- sublime ctags的安装使用方法
- linux将所有文件生成lst_Linux自定义repo文件
- MyEclipse的Debug模式
- ListView添加headview
- Java并发包——使用新的方式创建线程
- 跨境电商独立站,该如何去经营呢?
- 调制解调器报告了一个错误是什么状况
- android 图片加载方式
- 资源编译器 rc .exe 的参数
- svc补偿时matlab仿真设计,TCR+FC型SVC的研究及MATLAB仿真
- 从信号与系统,数字信号处理的角度看目前手头研发的蓝牙耳机
- VS2017好用的插件推荐
- FusionAccess桌面云模板制作
- 【深入理解数据库原理】原理
- java免费获取物流信息