关键在于这句:Quadratic probing (with positive increments only) is used to solve the collisions.开始不懂二次探测,因此做不出来。所谓二次探测就是如果num%mSize被占坑了,就看看(num+1*1)%mSize有没有被占,还是被占,看(num+2*2)%mSize……如果一直到(num+(mSize-1)*(mSize-1))%mSize都被占,说明真的插不进去了。

AC代码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<time.h>using namespace std;
typedef long long LL;const int maxn = 10007;
const int MOD = 1000000007;
const int INF = 1000000000;//INF:下确界
const LL SUP = (1LL<<63)-1;//SUP:上确界
const double eps = 1e-5;bool isPrime(int n){//判断一个十进制数是否为素数 if(n<=1)return false;for(int i=2;i<=(int)sqrt(1.0*n);i++){if(n%i==0)return false;}return true;
}int main(){int mSize,n;scanf("%d%d",&mSize,&n);if(!isPrime(mSize)){//不是素数,换成大于它的最小素数 for(int i=mSize;i<=maxn;i++){//maxn = 10^4+7是一个素数 if(isPrime(i)){mSize = i;break;}}}bool hashTable[maxn] = {0};int num;for(int i=0;i<n;i++){scanf("%d",&num);if(!hashTable[num%mSize]){printf("%d",num%mSize);hashTable[num%mSize] = true;}else{//二次探测bool noFound = true;for(int j=0;j<mSize;j++){int index = num+j*j;if(!hashTable[index%mSize]){printf("%d",index%mSize);hashTable[index%mSize] = true;noFound = false;break;}} if(noFound)printf("-");//满足if内的条件说明一直j加到mSize-1也没找到空位 }if(i!=n-1)printf(" "); }return 0;
}

1078 Hashing相关推荐

  1. PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...

  2. 1078. Hashing (25)-PAT甲级真题

    1078. Hashing (25) The task of this problem is simple: insert a sequence of distinct positive intege ...

  3. PAT (Advanced Level) 1078. Hashing (25)

    二次探测法.表示第一次听说这东西... #include<cstdio> #include<cstring> #include<cmath> #include< ...

  4. 1078 Hashing (25 分)【难度: 一般 / 知识点: 哈希表二次探测法】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805389634158592 不得不说,读了半天的假题,以为就是直接判断可 ...

  5. PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表.哈希表开放寻址法.二次探测法链接的题目就是让建立h ...

  6. PAT-1078 Hashing

    1078 Hashing part 3, 3.1 自己解法 注意最后一个点需要处理二次探测 #include <iostream> using namespace std; #includ ...

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

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

  8. PAT (Advanced Level) Practice 题解代码 - II (1051-1100)

    PAT PAT (Advanced Level) Practice - II(1051-1100) -------------------------------------------------- ...

  9. 刷PAT甲级的各题思路、细节以及遇到的问题记录

    1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...

最新文章

  1. Unsupervised Feature Selection in Signed Social Networks 阅读笔记
  2. vue-router使用next()跳转到指定路径时会无限循环
  3. Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题
  4. grldr 和 grldr.mbr 区别
  5. 建立单独的解决方案来开发DNN模块
  6. vscode搜索文件_VS Code 新图标来临 —— 侧边栏、文件管理器、搜索、调试等区域的图标迎来全新设计...
  7. android: 动态加载碎片布局的技巧
  8. 7-5-无向图生成树-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
  9. Android开发笔记(一百一十九)工具栏ToolBar
  10. Nginx常用使用解读及配置
  11. java 简单数组_Java 数组分析及简单实例
  12. win7免费升级win10官方工具
  13. kali wifi密码 破解
  14. CAM350简单编辑gerber文件(【增加一条线】 【复制元素】 【删除元素】)
  15. php 阿里云短信对接,验证码使用
  16. 10KV变配电增容工程电力监控系统的设计与应用
  17. Python 快速设置 Excel 表格边框
  18. Java——自定义图片和居中
  19. python改变像素点颜色_更改像素颜色Python
  20. 快速复制软件哪个好用安全?支持一键复制粘贴的工具

热门文章

  1. ThinkPHP 5.0 入门教程 一:安装ThinkPHP并在Web浏览器访问
  2. Java面试题总结-Day4
  3. 图论之拓扑排序 poj 2367 Genealogical tree
  4. 你必须知道的.net学习总结
  5. sed学习系列---第3/3部分
  6. 【海洋女神原创】installshield 32位打包和64位打包的注意事项
  7. Pycharm 建立工程,包含多个工程目录
  8. 【Linux探索之旅】第二部分第五课:用户和权限,有权就任性
  9. Safari 有望支持 WebP
  10. 从外部导入django模块