当前位置:网站首页>PAT甲级 1078 哈希
PAT甲级 1078 哈希
2022-08-02 14:23:00 【键盘奏鸣曲】
将一个由若干个不同正整数构成的整数序列插入到一个哈希表中,然后输出输入数字的位置。
哈希函数定义为 H(key)=key%TSize,其中 TSize 是哈希表的最大大小。
利用只具有正增量的二次探测法来解决冲突。
注意,哈希表的大小最好是素数,如果用户给出的最大大小不是素数,则必须将表大小重新定义为大于用户给出的大小的最小素数。
输入格式
第一行包含两个整数 MSize 和 N,分别表示用户定义的表的大小以及输入数字的数量。第二行包含 N 个不同的正整数,数字之间用空格隔开。
输出格式
在一行中,输出每个输入数字的相应位置(索引从 0 开始),数字之间用空格隔开,行尾不得有多余空格。如果无法插入某个数字,则输出 -。
数据范围
1≤MSize≤104,
1≤N≤MSize,
输入数字均在 [1,105] 范围内。输入样例:
4 4
10 6 4 15
输出样例:
0 1 4 -
我的解法:
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int h[N];
int s, n;
bool is_prime(int n){
if(n == 1) return false;
for(int i = 2; i * i <= n; i ++ ){
if(n % i == 0) return false;
}
return true;
}
int find(int t){
int k = t % s;
for(int i = 0; i < s; i ++ ){
int j = (k + i * i) % s;
if(h[j] == 0) return j;
}
return -1;
}
int main(){
cin >> s >> n;
while(!is_prime(s)) s ++;
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;
}
收获:
哈希表解决冲突有两种方式,拉链法和开放寻址法,本题要求 正增量的二次探测法 ,让key + 1^2 、key+2^2、key+3^2依次寻找空位插入
边栏推荐
- lammps学习(一)单晶硅纳米磨削
- 基于Visual Studio 2015的CUDA编程(一):基本配置
- 马甲包接入过程记录
- 2021 Huawei Cup Mathematical Modeling Contest E question - Ultra-Wideband (UWB) precise positioning problem under signal interference
- 2022-07-11 第五小组 瞒春 学习笔记
- MATLAB中dist与pdist、pdist2的区别与联系
- 【JS执行机制】
- 2022/7/15,我的人生中第一篇博客,不忘初心,砥砺前行!
- 2022-07-27 第六小组 瞒春 学习笔记
- 如何使用Swiper外部插件写一个轮播图
猜你喜欢
随机推荐
BOM(Browser Object Model)浏览器对象模型相关概念
【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)
【故障诊断】基于PSO_VMD_MCKD方法的风机轴承微弱故障诊断
ELK日志分析系统
两分钟录音就可秒变语言通!火山语音音色复刻技术如何修炼而成?
如何使用Swiper外部插件写一个轮播图
2022年低压电工考试试题及在线模拟考试
解决跨域的方法 --- Proxy
Object.defineProperty方法(详解)
Golang学习(三十五) go 连接redis
数据库性能优化的误区!
【滤波器】最小均方(LMS)自适应滤波器
this beta version of Typora is expired, please download and install a newer version.Typora的保姆级最新解决方法
Cookie 和 Session
双亲委派机制
JSP技术
Redis的5中数据类型总结
DOM —— 事件机制及事件链
js中的join()方法
如何正确且快速的清楚C盘!!释放C盘空间内存保姆级教程