当前位置:网站首页>PAT甲级 1145 哈希 - 平均查找时间
PAT甲级 1145 哈希 - 平均查找时间
2022-08-02 14:23:00 【键盘奏鸣曲】
这个问题的任务很简单:
首先将一个由若干个不同正整数构成的整数序列插入到一个哈希表中,然后尝试从表中查找另一个整数键值序列,并输出平均查找时间(查找时间指查找某个值是否在表中所进行的比较操作的次数)。
哈希函数定义为 H(key)=key%TSize,其中 TSize 是哈希表的最大大小。
利用只具有正增量的二次探测法来解决冲突。
注意,哈希表的大小最好是素数,如果用户给出的最大大小不是素数,则必须将表大小重新定义为大于用户给出的大小的最小素数。
输入格式
第一行包含三个正整数 MSize,N,M,分别表示用户定义的表的大小,插入整数的数量,查找键值的数量。第二行包含 N 个不同的正整数,表示插入序列。
第三行包含 M 个正整数,表示键值序列。
同行数字之间用空格隔开,两个序列中包含的整数均不超过 105。
输出格式
如果无法插入一些数字,则将其按顺序以如下格式输出,每个数字占一行:X cannot be inserted.
其中 X 表示无法插入的数字。最后一行输出 M 次查找的平均查找时间,保留一位小数。
注意: 如果查找了 TSize 次,每次查找的位置上均有数,但都不等于要查找的数,则认为查找时间是 TSize+1。
数据范围
1≤MSize,N,M≤104
输入样例:
4 5 4
10 6 4 15 11
11 4 15 2
输出样例:
15 cannot be inserted.
2.8
我的解法:
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n, m, s;
int h[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 x, int &count){
int t = x % s;
for(int i = 0; i < s; i ++ ){
int j = (t + i * i) % s;
if(h[j] == 0 || h[j] == x) return j;
else count ++ ;
}
return -1;
}
int main(){
cin >> s >> n >> m;
while(!is_prime(s)) s ++;
for(int i = 0; i < n; i ++ ){
int x, count = 1;
cin >> x;
int t = find(x, count);
if(t == -1) printf("%d cannot be inserted.\n", x);
else h[t] = x;
}
int cnt = 0;
for(int i = 0; i < m; i ++ ){
int x, count = 1;
cin >> x;
int t = find(x, count);
cnt += count;
}
printf("%.1lf", (double) cnt / m);
return 0;
}收获:
哈希查找和存值用同一个函数
边栏推荐
猜你喜欢

2022-07-20 第六小组 瞒春 学习笔记

2022年安全员-A证考试试题及模拟考试

数据源,分层开发以及jsp标签总结及相关代码

nodejs 的下载安装与环境配置

第五章-5.2-指示器随机变量

2021 Huawei Cup Mathematical Modeling Contest E question - Ultra-Wideband (UWB) precise positioning problem under signal interference

解决跨域的方法 --- Proxy

2022-07-27 第六小组 瞒春 学习笔记

idea使用jdbc对数据库进行增删改查,以及使用懒汉方式实现单例模式

2022-07-23 第六小组 瞒春 学习笔记
随机推荐
初识art-template模板引擎
C语言的基本程序结构详细讲解
DOM - Event Object
DOM - Element Box Model
加点字符就能让qq昵称很酷的神奇代码?
2021 annual summary - complete a year of harvest
【Frequency Domain Analysis】Spectral leakage, frequency resolution, picket fence effect
从零开始的循环之旅(上)
李开复花上千万投的缝纫机器人,团队出自大疆
只出现一次的数字||| —— 哈希映射、异或位运算+分治思想
Golang学习(三十五) go 连接redis
nodejs 的下载安装与环境配置
XML技术
2021年度总结——收获圆满的一年
DOM —— 事件对象
Window function method for FIR filter design
2022-7-12 第五组 瞒春 学习报告
2022-07-29 第六小组 瞒春 学习笔记
学习编程的目标
公司最大的内卷,是“管理错位”