1564. 哈希

原题传送:AcWing 1564. 哈希

将一个由若干个不同正整数构成的整数序列插入到一个哈希表中,然后输出输入数字的位置。

哈希函数定义为 H(key)=key%TSizeH(key)=key\%TSizeH(key)=key%TSize ,其中 TSizeTSizeTSize 是哈希表的最大大小。

利用只具有正增量的二次探测法来解决冲突。

注意,哈希表的大小最好是素数,如果用户给出的最大大小不是素数,则必须将表大小重新定义为大于用户给出的大小的最小素数。

输入格式

第一行包含两个整数 MSizeMSizeMSize 和 NNN ,分别表示用户定义的表的大小以及输入数字的数量。

第二行包含 NNN 个不同的正整数,数字之间用空格隔开。

输出格式

在一行中,输出每个输入数字的相应位置(索引从 000 开始),数字之间用空格隔开,行尾不得有多余空格。

如果无法插入某个数字,则输出 -

数据范围

1≤MSize≤1041 \le MSize \le 10^41≤MSize≤104 ,
1≤N≤MSize1 \le N \le MSize1≤N≤MSize ,
输入数字均在 [1,105][1,10^5][1,105] 范围内。

输入样例:

4 4
10 6 4 15

输出样例:

0 1 4 -

思路:

先找到哈希表大小,然后开放寻址法得到对应下标的数字。

题解:

#include<bits/stdc++.h>using namespace std;const int N = 10010;int msize, n;
int h[N];int prime(int n)
{int i;for(i = 2; i <= sqrt(n); i++)if(n % i == 0)break;if(n <= 1)return 0;else if(i > sqrt(n))return 1;elsereturn 0;
}int find(int x)
{int t = x % msize;for(int k = 0; k < msize; k++){int i = (t + k * k) % msize;if(!h[i])return i;}return -1;
}int main()
{   scanf("%d%d", &msize, &n);while(!prime(msize))msize++;for(int i = 0; i < n; i++){int x;scanf("%d", &x);int t = find(x);if(i)printf(" ");if(t == -1)printf("-");else{h[t] = x;printf("%d", t);}}return 0;
}

【题解】【AcWing】1564. 哈希相关推荐

  1. AcWing:哈希表

    哈希表理论基础 哈希表有两大要点: 存储结构 开放寻址法 拉链法 字符串哈希 哈希表的最主要作用是将一个比较大的范围(如10^9)映射到一个比较小的空间(0 ~ N,其中N一般为10^5 - 10^6 ...

  2. acwing基础课——哈希表

    由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板2--数据结构 - AcWing 基本思想: 哈希表:也叫做散列表.是根据关键字和值(Key-Value)直接进行访问的数据结构.也 ...

  3. PAT甲级1042 Shuffling Machine:[C++题解]模拟、哈希表、洗牌机

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:序列置换. 这里用到函数memcpy()用于数组复制,用法memcpy(dest, src, sizeof dest); 把src数组 ...

  4. PAT甲级1041 Be Unique :[C++题解]模拟、哈希表

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:统计次数,按序遍历,输出第一个出现次数为1的号码. ac代码 #include<bits/stdc++.h> using ...

  5. PAT甲级题目翻译+答案 AcWing(哈希表)

    1048 Find Coins (25 分) 题意 : 给一序列,要求从中选出两个值使得它们的和恰好等于m,输出第一个值字典序最小且升序的方案 思路 : 看似O(n2)O(n^2)O(n2),其实可以 ...

  6. PAT甲级1039 Course List for Student :[C++题解]排序、哈希表

    文章目录 题目分析 题目链接 题目分析 此题以为会卡时间,特意使用scanf来读,结果本题不是这里卡时间.而是看查询效率高不高. 考察hash 表,然后vector排个序即可. ac代码 #inclu ...

  7. 《剑指offer》第1~11题:刷题week1[C++题解]

    文章目录 1. 找出数组中重复的数字 思路一:排序 思路二:hash表 思路三:原地交换 2. 不修改数组找出重复的数字 思路:抽屉原理+二分 3. 二维数组中的查找 思路:思维题(选取右上角的值) ...

  8. Acwing -- 单调队列优化的DP问题

    文章目录 引入 acwing154 滑动窗口 应用 135 最大子序和 1088.旅行问题 AcWing 1087. 修剪草坪28 AcWing 1089. 烽火传递 AcWing 1090. 绿色通 ...

  9. LeetCode 214. 最短回文串(字符串哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...

  10. AcWing 1113. 红与黑【《信息学奥赛一本通》】【DFS】【BFS】【Flood Fill】

    AcWing 1113. 红与黑 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 解法一(BFS): 解法二(DFS): 四.其它题解 一.题目链接 AcWing 1113. ...

最新文章

  1. 后门构建工具Backdoor Factory
  2. hdoj-2039-三角形
  3. python中json.load()、json.loads()、json.dump()、json.dumps()的区别
  4. DecimalFormat 保留精度或者是 小数 比较好用
  5. linkedHashMap源码解析(JDK1.8)
  6. php create()方法,ThinkPHP中create()方法自动验证实例
  7. SSIS 包部署错误 0xC0010014
  8. QFileInfoList
  9. 334个地级市名单_2016年最新中国地级市名单
  10. 计算机组装硬件配置清单,组装电脑配置清单
  11. linux怎样编译安装pidgin,Ubuntu 10.04编译安装Pidgin-2.7.3整个过程
  12. windows10自带屏保设置
  13. Webx系列之文件上传
  14. 1.2 webstorm设置pug自动编译
  15. 计算机教 学计划,计算机教学计划4篇
  16. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)
  17. 《微信思维》摘录(一)
  18. 良心安利吸顶灯ies光域网素材网站
  19. axios拦截设置和错误处理
  20. ChatGPT之父Sam Altman28岁从YC创始人保罗·格雷厄姆手中继任总裁,37岁震惊全球

热门文章

  1. 学习单片机c51矩阵键盘,按键无反应
  2. 金蝶专业版日记账批量生成凭证导入操作
  3. alanwang[GDOU] 简单练习 判断一个年份是否为闰年
  4. 【NOIP2018复习】可见点数【数论】
  5. 微信服务器维护中什么意思,公众号运营维护是什么意思,微信公众号的日常运营与维护技巧!...
  6. 幼儿园计算机基础知识,幼儿园大班计算机教学计划
  7. (DDIA)SQL与NoSQL数据模型简介
  8. 人口流向逆转带来什么变化(zz)
  9. 今生,只想做一个平凡的人
  10. 图像处理-泊松融合(Possion Matting)