一道历史悠久且经典的哈希法例题,哈希法的题目实在是比较少。

暴力枚举的话复杂度显然是是,实际上,如果能提前计算出每个雪花的特性,那么属性不相同的雪花就无需进行比较。相当于我们将雪花分成若干个小组(想想世界杯为什么要分小组赛,而不是32个队都两两比一次),每个小组内部两两比较,这样的话复杂度就会降低。假设我们能把n个数组分成X组,每组数据估算为n/X个,组内两两比较。那么算法复杂度为,当X比较大时复杂度会有明显的降低。

这样分组使用的方法(哈希函数)就很重要,既要保障X的值稍大一点,又要保证相同的雪花一定分在同一组。最简单的就是把雪花的6个角值求和(也可以求乘积),再对X求余,X取值可以设定为某个质数,如果设定为997,那么雪花被分成997组,同理也可以设定为9997或其他值,读者可以尝试把X设置比较小的值,如97看看会否超时。

计算两个雪花是否一致只能用暴力算法,用环处理或者直接枚举位置都可行,此处是直接枚举正反两方向。

#include <iostream>
#include<vector>
typedef long long ll;
using namespace std;
ll n,a[100005][7],mod=99997;
vector<int>v[100010];/**< 动态二维数组v用于存储哈希表,哈希值为X的元素存储在v[X]中,实际上是教材上的链地址法,但是链表太麻烦了,用这种写法可以完美取代链表*/
int hs(int i) /**< 哈希函数 */
{return (a[i][1]%mod+a[i][2]%mod+a[i][3]%mod+a[i][4]%mod+a[i][5]%mod+a[i][0]%mod)%mod;
}
bool check(int x,int y)
{int i,j;for(i=0; i<6; i++)/**< 正反两个方向比较雪花 */if(a[x][0]==a[y][i]&&a[x][1]==a[y][(i+1)%6]&&a[x][2]==a[y][(i+2)%6]&&a[x][3]==a[y][(i+3)%6]&&a[x][4]==a[y][(i+4)%6]&&a[x][5]==a[y][(i+5)%6])return true;for(i=0; i<6; i++)if(a[x][0]==a[y][i]&&a[x][1]==a[y][(i+5)%6]&&a[x][2]==a[y][(i+4)%6]&&a[x][3]==a[y][(i+3)%6]&&a[x][4]==a[y][(i+2)%6]&&a[x][5]==a[y][(i+1)%6])return true;return false;
}
int main()
{int i,j,k,l;cin>>n;for(i=1; i<=n; i++){for(j=0; j<6; j++)scanf("%d",&a[i][j]);int t=hs(i);/**< 计算哈希值t后,下面循环访问v[t],和之前出现过,且哈希值同样是t的雪花做比较 */for(j=0; j<v[t].size(); j++)if(check1(i,v[t][j])){cout<<"Twin snowflakes found.";return 0;}v[t].push_back(i);/**< 比较结束,将i加入对应的哈希表, */}cout<<"No two snowflakes are alike.";return 0;
}

18907 雪花雪花雪花相关推荐

  1. 用python画六瓣雪花_python-turtle-画雪花-2种方法及效果的详解

    #python3.8#xuguojun#2020.1.30#导出模块,这样导出比代码较简洁,但是注意r和后面RGB的r,所以我改为d代替R(r) importturtle as timportrand ...

  2. c语言课程设计雪花飞舞,雪花飞舞--c语言课程设计.doc

    雪花飞舞--c语言课程设计 PAGE 计算机技术基础课程设计 C语言 设计报告 题目:雪花飞舞 一.选题背景: 问题的提出:我们在编制各种flash动画设计时,经常会用到风雪的背景,为此编制几个函数对 ...

  3. 雪花LOGO - 雪花标志 - 雪花商标 - 设计和创意欣赏

    雪花logo图片                                                             一个优秀的标志可以给让你的企业给用户带来深刻的印象,国产风格和 ...

  4. python星号画雪花_python-turtle-画雪花

    1.雪花 2.用python画雪花 代码: #python3.8 #xuguojun #2020.1.30 #导出模块 import turtle as t import random as r #定 ...

  5. C语言雪花算法,雪花算法运用

    雪花算法实现 继上篇https://www.jianshu.com/p/c83715d7dfaa分析了分布式id问题,说到了雪花算法,本着知其所以然的想法,看一看雪花算法如何实现的,很多大厂也基于雪花 ...

  6. java雪花_java雪花算法

    java工具类 1.IdGeneratorSnowflake.java用于生成雪花算法,分为有参构造和无参构造 package com.sale.util.common; import cn.huto ...

  7. 圣诞节快到了,用python绘制高级版圣诞树(小彩灯+落叶+静态雪花+动态雪花+唱歌+祝福弹窗+圣诞树词云图),直夸好看

    前言 一年一度的圣诞节快到了,博客上也开始五花八门的出现各种博文,当然朋友圈也是圈出来花来了.在CSDN搜索栏里面发现大家的博文阅读量也都[]破万了,当然也不能湿了这波热度,必须给安排上... 新手级 ...

  8. c语言sleep_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美

    前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可以给学生作 ...

  9. php实现页面雪花效果,JavaScript_使用javascript实现雪花飘落的效果,看了javascript网页特效实例大全 - phpStudy...

    使用javascript实现雪花飘落的效果 看了javascript网页特效实例大全中的图片飘下的效果实例,觉得值得动手学习下. 就把图片改成雪花图,完成一个雪花飘下的效果. 并且,其中有些内容比较陈 ...

  10. 取两个数较小值c语言_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美...

    前言 1.本文主要围绕 如何 在 控制台上 下起 一场 只有自己能看见的雪 2.是个简易跨平台的,主要是C语言 3.动画 采用 1s 40帧, 雪花具有 x轴速度和y轴速度 4.比较简单,可以给学生作 ...

最新文章

  1. 最近火爆全网!这个 Python 项目很骚气!
  2. [转] DataSet的的几种遍历
  3. 用prop还是attr
  4. Java nginx 双向ssl_使用Nginx实现HTTPS双向验证的方法
  5. ASP.NET Core托管运行Quartz.NET作业调度详解
  6. Harris角点检测+sift描述匹配
  7. java Web监听器导图详解
  8. zabbix的邮件报警
  9. 内存管理学习之内存寻址
  10. html5版本过低,你的浏览器版本过低【解决步骤】
  11. C++高阶 每个对象都有一个this指针
  12. phpstudy linux安装教程
  13. 旅游黄山需要注意的几个问题
  14. Prometheus + Grafana 搭建监控报警系统
  15. 链路(link)与数据链路(data link)
  16. 【教程】PhotoShop一些快捷键
  17. App Thinning(应用瘦身)功能介绍
  18. QT5.14.2+VS2019 构建套件(Kit)黄色感叹号问题解决
  19. 怎么将一个音频无损剪切
  20. html水平线 虚线

热门文章

  1. labview教学视频:http://www.51zxw.net/study.asp?vip=19649795
  2. 音乐手记之民谣一:Empyrium
  3. 专利解析|多维建模结合AI识别商品特征的方法
  4. 计算机桌面壁纸小,电脑的桌面壁纸大小怎么设置
  5. 全景krpano相关问题解答
  6. 医学四视图-005-四视图加按钮
  7. delphi 域名解析IP 域名转为IP地址
  8. 有没有便宜一点的网站服务器,有便宜一点的云服务器卖吗
  9. 联想Y50耳机插入耳机孔后没有声音解决办法
  10. python循环:打印小星星