立志用最少的代码做最高效的表达


本题的任务很简单:将给定的无重复正整数序列插入一个散列表,输出每个输入的数字在表中的位置。所用的散列函数是 H(key)=key%TSize,其中 TSize 是散列表的表长。要求用平方探测法(只增不减,即H(Key)+i^2)解决冲突。

注意散列表的表长最好是个素数。如果输入给定的表长不是素数,你必须将表长重新定义为大于给定表长的最小素数。

输入格式:
首先第一行给出两个正整数 MSize(≤10^4)和N(≤MSize),分别对应输入的表长和输入数字的个数。随后第二行给出 N 个不重复的正整数,数字间以空格分隔。

输出格式:
在一行中按照输入的顺序给出每个数字在散列表中的位置(下标从 0 开始)。如果某个数字无法插入,就在其位置上输出 -。输出间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
4 4
10 6 4 15

输出样例:
0 1 4 -


Hash平方探测法模板

注意:
何种情况下某值无法插入到序列中?
答:如果序列长度为7,则循环到7*7及以后,就会形成周期循环, 因此循环次数小于序列长度即可。

举例:x=1,n=7时, x+0∗0x+0*0x+0∗0等价于x+7∗7x+7*7x+7∗7 ;x+1∗1x+1*1x+1∗1等价于x+8∗8)x+8*8)x+8∗8)

证明:参考取余性质,有: (x+8*8)%7=(x+(1+7)*(1+7))%7=(x+(1+7+7+49))%7=(x+1)%7+7%7+7%7+49%7=(x+1)%7


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
int is(int n) {if(n == 1)return 0;if(n == 2 || n == 3)return 1;if(n % 6 != 1 && n % 6 != 5)return 0;for(int i = 5;i * i <= n;i += 6) if(n % i == 0 || n % (i + 2) == 0)return 0;return 1;
}
int main() {int m,n;int s,p,v[10007] = {0};scanf("%d %d",&m,&n);while(!is(m))m ++;for(int i = 0;i < n;i ++) {p = -1;scanf("%d",&s);for(int j = 0;j < m;j ++) {if(!v[(s + j * j) % m]) {v[(s + j * j) % m] = 1;p = (s + j * j) % m;break;}}if(i)putchar(' ');if(p == -1)printf("-");else printf("%d",p);}
}

弱小和无知不是生存的障碍,傲慢才是。       ——《三体》

整型关键字的平方探测法散列 (25 分)【详细解析】相关推荐

  1. pta 整型关键字的平方探测法散列

    本题的任务很简单:将给定的无重复正整数序列插入一个散列表,输出每个输入的数字在表中的位置.所用的散列函数是 H(key)=key%TSize,其中 TSize 是散列表的表长.要求用平方探测法(只增不 ...

  2. 7-42 整型关键字的散列映射 (25 分)(思路加详解)兄弟们 来呀 写题呀

    一:题目 给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中.用线性探测法解决冲突. 输入格式: 输入第一行首先给出两个正整数N(≤1000) ...

  3. java怎么sha散列算法_Java sha1散列算法的原理解析

    Java sha1散列算法的原理解析 发布时间:2020-10-31 00:01:59 来源:亿速云 阅读:101 作者:Leah 今天就跟大家聊聊有关Java sha1散列算法的原理解析,可能很多人 ...

  4. 定义名为MyTime的类,其中应有三个整型成员:时(hour),分(minute),秒(second);C++

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 在程序中,经常要对时间进行操作,但是并没有时间类型的数据.那么,我们可以自己实现一个时间类,来满足程序中的需要. 定义名为My ...

  5. 【数据结构与算法】平方探测法散列表的Java实现

    QuadraticProbingHashTable核心功能设计 boolean insert(x) → Insert x. boolean remove(x) → Remove x. boolean ...

  6. php坐标轴取整,PHP取整函数:ceil,floor,round,intval的区别详细解析

    我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. ceil -- 进一法取整说明float ceil ( float value ) 返回不小于 value 的下 ...

  7. HashMap中提到的散列是什么?

    一)散列的基本概念 散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点 ...

  8. C++(数据结构与算法):30---散列(哈希)表的介绍(散列函数、散列冲突、散列溢出)

    一.散列(哈希)介绍 散列使用一个散列函数(也称为哈希函数)把字典的数对映射到一个散列表(也称为哈希表)的具体位置 散列的存储与查找: 查找:如果数对p的关键字是k,散列函数为f,那么在理想的情况下, ...

  9. C语言基本数据类型笔记整理(整型、实型/浮点型、字符型、枚举型、构造类型、指针类型、空类型)

    C语言基本数据类型 一.整型 ①有符号整型 ②无符号整型 二.实型 三.字符型 四.枚举型 五.构造类型 ①数组 ②结构体 ③共用体 六.指针类型 七.空类型 一.整型 ①有符号整型 有符号整型 关键 ...

最新文章

  1. AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
  2. 企业网站优化两个重点多加重视!
  3. 如何在android中设置背景,如何在Android中以编程方式设置背景可绘制
  4. java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
  5. 步进电机无细分和20细分_细分网站导航会话
  6. Scrapy-redis实现分布式爬取的过程与原理
  7. java nosql_使用NoSQL实现实体服务–第4部分:Java EE
  8. 献给 Python 开发人员的 25 个最佳 GitHub 代码库!
  9. (16)FPGA面试技能提升篇(Python)
  10. java两个数最大公约数和最小公倍数_java中请给出例子程序:找出两个数的最大公约数和最小公倍数...
  11. copy php是否开启_命令行方式启动php服务
  12. 创新企业如何“跨越鸿沟”?
  13. Python 之 处理 Excel 数据(3) —— 统计数据
  14. 射影几何笔记7:直线方程
  15. python计算复数的辐角_Python机器学习(五十六)SciPy fftpack(傅里叶变换)
  16. 卧槽,GitHub 开源了一个看片神器!
  17. python为什么胶水语言_Python真的什么都可以做,胶水语言可不是白叫的
  18. 沐风老师ATilesPro for 3dMax屋顶设计插件使用教程
  19. linux设备端口编写,在Linux上开发HDMI端口
  20. office右键没有新建word,Visio等解决办法

热门文章

  1. Kafka端到端审计
  2. 设计模式:状态模式(State)
  3. 写 Go 时如何优雅地查文档
  4. OS- -进程详详解
  5. 事件过滤器及不规则窗体
  6. LiveVideoStack线上分享第五季(十二):移动端多种通话场景统一技术方案实践...
  7. 腾讯极客挑战赛邀你“码上种树”
  8. 拯救乳房:乳腺癌AI诊断系统
  9. 在Linux系统的命令行中为MySQL创建用户的方法
  10. virtualbox中Centos6.6和windows共享文件夹设置