这是一道可以练习哈希表的模板题。关于哈希表的操作均有涉及。

哈希函数的选取是这道题的关键。这道题的关键字是一个长度为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相关推荐

  1. 【POJ3349】Snowflake Snow Snowflakes(哈希表判重,维护一个集合)

    problem 有n片雪花,每片有6个脚,每个脚有一个长度. 两片雪花是一样的当且仅当每个脚的长度顺序都一样(顺逆时针和开始位置不管) 求n片雪花中是否有一样的雪花. solution 维护一个哈希表 ...

  2. 【JavaScript】下大雪

    引用[JavaScript]满天星的代码,稍作修改的结果: function drawStars() {for (i = 1; i < 100; ++i) {ctx.fillText(" ...

  3. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  4. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  5. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

  6. 【C#】Out与ref是干什么的?

    关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...

  7. 【软件工程】RUP与软件开发5大模型

    软件开发的5大模型 1.瀑布模型:按照人的思维一步一步的开发下去,如果需求分析得当,每个阶段顺利,结果还不错! 2.快速原型模型:后来人们发现,自己不可能一下子就把所有的需求搞清楚,总是在开发的过程中 ...

  8. 【VB】学生信息管理系统5——数据库代码

    这次学生信息管理系统在代码的理解过程中遇到了一些问题.总结如下: 1. sql server的安装过程各个步骤的意思.在安装SQL Server的时候按照网上的步骤,我觉得这个需要学完整个数据库再返回 ...

  9. 白化(预处理步骤)【转】

    白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...

最新文章

  1. 【300】◀▶ IDL - ENVI API
  2. 写给想用技术改变世界的年轻人-by 沃兹
  3. 【转载】企业级服务器设计与实现经验之插件系统基础篇
  4. TCP的拥塞控制(详解)
  5. ubuntu 安装 docky
  6. sublime ctags的安装使用方法
  7. linux将所有文件生成lst_Linux自定义repo文件
  8. MyEclipse的Debug模式
  9. ListView添加headview
  10. Java并发包——使用新的方式创建线程
  11. 跨境电商独立站,该如何去经营呢?
  12. 调制解调器报告了一个错误是什么状况
  13. android 图片加载方式
  14. 资源编译器 rc .exe 的参数
  15. svc补偿时matlab仿真设计,TCR+FC型SVC的研究及MATLAB仿真
  16. 从信号与系统,数字信号处理的角度看目前手头研发的蓝牙耳机
  17. VS2017好用的插件推荐
  18. FusionAccess桌面云模板制作
  19. 【深入理解数据库原理】原理
  20. java免费获取物流信息

热门文章

  1. win安装夜神安卓模拟器
  2. 计算机房防水,机房如何做到防水?
  3. SRS4.0源码分析-序言
  4. CODESYS在工厂自动化中的应用案例:运动控制集成方案
  5. 《Wireshark数据包分析实战(第2版)》目录—导读
  6. 深度解析:一文让你领略支付宝应用架构的厉害之处!
  7. 索画(金山2022)
  8. Caffe源码解析(一) —— caffe.proto
  9. C#+Selenium+Nunit demo
  10. 网页浏览速度慢的排查原因