【PAT甲级 - C++题解】1078 Hashing
admin
2024-04-09 08:21:58
0

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:PAT题解集合
📝原题地址:题目详情 - 1078 Hashing (pintia.cn)
🔑中文翻译:哈希
📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

1078 Hashing

The task of this problem is simple: insert a sequence of distinct positive integers into a hash table, and output the positions of the input numbers. The hash function is defined to be H(key)=key%TSizeH(key)=key \% TSizeH(key)=key%TSize where TSize is the maximum size of the hash table. Quadratic probing (with positive increments only) is used to solve the collisions.

Note that the table size is better to be prime. If the maximum size given by the user is not prime, you must re-define the table size to be the smallest prime number which is larger than the size given by the user.

Input Specification:

Each input file contains one test case. For each case, the first line contains two positive numbers: MSize (≤104) and N (≤MSize) which are the user-defined table size and the number of input numbers, respectively. Then N distinct positive integers are given in the next line. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print the corresponding positions (index starts from 0) of the input numbers in one line. All the numbers in a line are separated by a space, and there must be no extra space at the end of the line. In case it is impossible to insert the number, print “-” instead.

Sample Input:

4 4
10 6 4 15

Sample Output:

0 1 4 -

题意

这道题给定一个表的大小以及元素的个数,我们需要利用二次探测法来计算每个元素在表中的位置,如果能找到对应位置则输出对应位置的下标,反之输出 - 。另外,表的大小必须为质数,如果给定的不是质数,则需要求出大于该值的最小质数当做表长。

关于什么是二次探测法,我在之前的 C++ 实现查找的博客中有详细讲解,传送门如下:

(239条消息) C++实现查找 - 顺序、二分和哈希查找_Pandaconda的博客-CSDN博客_顺序查找c++

思路

思路如下:

  1. 判断表长是否为质数,如果不是则递增表长,直至找到大于给定表长的第一个质数。
  2. 查找给定元素在表中的下标位置,通过二次探测法解决哈希冲突,如果能找到一个位置则返回该下标,否则返回 -1
  3. 根据查找的结果更新哈希表中的值,并输出相应结果。

代码

#include
using namespace std;const int N = 10010;
int h[N];
int m, n;//判断x是否为质数
bool is_prime(int x)
{if (x == 1)    return false;for (int i = 2; i * i <= x; i++)if (x % i == 0)return false;return true;
}//用二次探测法计算位置
int find(int x)
{int t = x % m;for (int k = 0; k < m; k++){int i = (t + k * k) % m;if (!h[i])   return i;}return -1;
}int main()
{cin >> m >> n;//先确保m为质数while (!is_prime(m))  m++;//判断数字能否插入到表中for (int i = 0; i < n; i++){int x;cin >> x;//计算是否能找到插入位置int t = find(x);if (t == -1)   cout << "-";else{h[t] = x;cout << t;}//末尾不能有空格if (i != n - 1)  cout << " ";}return 0;
}

相关内容

热门资讯

广东工行:制造业贷款余额近45... 2月24日,广东省高质量发展大会顺利召开,会议以“制造业与服务业协同发展”为主题,对广东产业融合发展...
可靠股份“开除”独董引争议,董... 可靠股份(301009.SZ)日前发布《关于解除公司独立董事职务的公告》称,独立董事景乃权丧失独立性...
SHEIN创始人许仰天罕见公开... 界面新闻记者 | 黄姗 界面新闻编辑 | 许悦 2月24日,跨境快时尚电商公司SHEIN希音创始...
雷军春节同款滑雪服意外出圈 3... 快科技2月24日消息,近日,小米创办人、董事长兼CEO雷军晒出春节滑雪照,引发网友热议。 有眼尖网...
盛合晶微科创板IPO成功过会! 2月24日,上海证券交易所上市审核委员会2026年第6次审议会议召开,审议结果显示,盛合晶微半导体有...
商道创投网·会员动态|华封集芯... 《商道创投网》2026年2月24日从官方获悉:北京华封集芯电子有限公司(以下简称"华封集芯")近日完...
原创 乌... 欧洲的能源局势再次迎来剧变。刚刚从友谊管道断供的阴影中稍作喘息,匈牙利和斯洛伐克又宣布暂停向乌克兰供...
再添1家,郑州“商转公贷款”直... 据郑州发布消息,2月24日,从郑州市住房公积金管理中心获悉,中国工商银行股份有限公司郑州商都路支行已...
原创 北... 北京北边这片地方,原来是农田和废弃地带。1998年,昌平区东小口镇被定为经济适用房重点开发区。次年,...
春节期间上海口岸进出境旅客超1... 本文转自【澎湃新闻】; 2月24日,澎湃新闻记者从上海海关获悉,2026年春节期间(2月15日-2月...
深圳诞生首家百亿级具身智能独角... 深圳商报·读创客户端首席记者 袁静娴 2月23日,全球机器人基础模型龙头企业智平方宣布完成B轮融资,...
原创 能... 在全球政治经济的博弈中,乌克兰再次进入了国际舆论的焦点。这一次,泽连斯基似乎采取了一个不容忽视的战略...
2.24犀牛财经晚报:27只基... 27只基金密集提示溢价风险 多只QDII与LOF产品在列 马年A股首个交易日,27只基金集中发布溢价...
阳光财险:护航餐饮安全 守护舌... 又是一年新春佳节来临,餐饮消费迎来旺季。阳光财险将专业、贴心服务融入新春餐饮消费场景,通过食品安全责...
外媒:美投资者撤离华尔街步伐加... 参考消息网2月24日报道据路透社2月20日报道,在美国科技巨头的回报逐渐减少、而表现更优的海外市场愈...
原创 欧... 如今的欧洲,正面临前所未有的困境。名义上,欧盟依然是全球第二大经济体,但实际上,欧盟内部早已四分五裂...
BAT冲进“亿级俱乐部”,AI... 文 | 硅基研究室 Judy 如果说2025年的春节,是DeepSeek这匹黑马的独舞,让“模型”...
原创 激... 激活民营经济一池春水 ——写在湖南“新春第一会”召开之际 长沙晚报掌上长沙2月24日讯 据湖南日报...
原创 急... 隔夜,现货黄金一度上涨超2%或超110美元,突破5200美元关口,刷新日高至5237.54美元。此前...
还说别人蒸馏?马斯克抨击Ant... 凤凰网科技讯 北京时间2月24日,对于美国AI创业公司Anthropic指控其他公司“蒸馏”其模型一...