PAT 甲级 1145 Hashing - Average Search Time
https://pintia.cn/problem-sets/994805342720868352/problems/994805343236767744
The task of this problem is simple: insert a sequence of distinct positive integers into a hash table first. Then try to find another sequence of integer keys from the table and output the average search time (the number of comparisons made to find whether or not the key is in the table). The hash function is defined to be ( 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 3 positive numbers: MSize, N, and M, which are the user-defined table size, the number of input numbers, and the number of keys to be found, respectively. All the three numbers are no more than 1. Then N distinct positive integers are given in the next line, followed by M positive integer keys in the next line. All the numbers in a line are separated by a space and are no more than 1.
Output Specification:
For each test case, in case it is impossible to insert some number, print in a line X cannot be inserted. where X is the input number. Finally print in a line the average search time for all the M keys, accurate up to 1 decimal place.
Sample Input:
4 5 4
10 6 4 15 11
11 4 15 2
Sample Output:
15 cannot be inserted.
2.8
代码:
#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + 10;
int M, N, K, x;
int a[maxn], ans[maxn], vis[maxn];
bool flag[maxn];
int all = 0; bool isprime(int x) {
if(x <= 1) return false;
if(x == 2) return true;
for(int i = 2; i * i <= x; i ++)
if(x % i == 0) return false;
return true;
} void Hash(int x) {
for(int i = 0; i < M; i ++) {
int key = (x + i * i) % M;
if(vis[key] == 0) {
vis[key] = 1;
ans[key] = x;
flag[x] = true;
return ;
}
}
if(!flag[x]);
printf("%d cannot be inserted.\n", x);
} int main() {
scanf("%d%d%d", &M, &N, &K);
for(int i = 0; i < N; i ++)
scanf("%d", &a[i]); if(M <= 1) M = 2;
while(!isprime(M)) M ++; memset(flag, false, sizeof(flag));
for(int i = 0; i < N; i ++)
Hash(a[i]); for(int k = 0; k < K; k ++) {
scanf("%d", &x);
for(int i = 0; i <= M; i ++) {
all ++;
int rec = (x + i * i) % M;
if(ans[rec] == x || ans[rec] == 0)
break;
}
}
printf("%.1lf\n", 1.0 * all / K);
return 0;
}
搜索次数就是先把哈希表建好 输入一个数 判断一下这个位置是不是它 或者判断一下哈希表里面有没有这个数字 如果第一次没搜到就二次规划 每搜一次加一次 (刚开始没明白搜索次数什么意思 是猪)
PAT 甲级 1145 Hashing - Average Search Time的更多相关文章
- PAT 甲级 1145 Hashing - Average Search Time (25 分)(读不懂题,也没听说过平方探测法解决哈希冲突。。。感觉题目也有点问题)
1145 Hashing - Average Search Time (25 分) The task of this problem is simple: insert a sequence of ...
- PAT Advanced 1145 Hashing – Average Search Time (25) [哈希映射,哈希表,平⽅探测法]
题目 The task of this problem is simple: insert a sequence of distinct positive integers into a hash t ...
- PAT 1145 Hashing - Average Search Time [hash][难]
1145 Hashing - Average Search Time (25 分) The task of this problem is simple: insert a sequence of d ...
- [PAT] 1143 Lowest Common Ancestor(30 分)1145 Hashing - Average Search Time(25 分)
1145 Hashing - Average Search Time(25 分)The task of this problem is simple: insert a sequence of dis ...
- PAT 1145 Hashing - Average Search Time
The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...
- 1145. Hashing - Average Search Time
The task of this problem is simple: insert a sequence of distinct positive integers into a hash ta ...
- 1145. Hashing - Average Search Time (25)
The task of this problem is simple: insert a sequence of distinct positive integers into a hash tabl ...
- PAT_A1145#Hashing - Average Search Time
Source: PAT A1145 Hashing - Average Search Time (25 分) Description: The task of this problem is simp ...
- PAT-1145(Hashing - Average Search Time)哈希表+二次探测解决冲突
Hashing - Average Search Time PAT-1145 需要注意本题的table的容量设置 二次探测,只考虑正增量 这里计算平均查找长度的方法和书本中的不同 #include&l ...
随机推荐
- php header函数导出excel表格
推荐一个除了用PHPExcel导出表格之外的另外一种比较简单不需要引入类文件的表格导入方法——header()导出excel表格. 导出表格的步骤封装成了方法,以便于重复使用,代码如下: /** * ...
- ipv6导致的域名解析慢,nslookup,lvs,hosts.conf
最近总是反应网站慢,先是查内网环境,又查机房网络环境,再查lvs配置,更查到xen开启导致的网络性能下降 更进一步的查到域名解析慢,最终发现ipv6的默认开启会导致域名解析慢: 而应用服务程序内部大多 ...
- QGis C++ 开发之创建临时图层并添加要素
开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中“添加文本数据图层”的一个简化版,本文不会涉及到对话框的使用 ...
- TTL,COMS,USB,232,422,485电平之详细介绍及使用
如有错误敬请指导! 今天来详细介绍一下TTL,COMS,USB,232,422,485电平,以及之间的转换问题. 有些地方的引脚图可能不是规范的,具体引脚以自己的模块资料为主,这篇文章着重介绍使用.. ...
- 一个将lambda字符串转化为lambda表达式的公共类
一个将lambda字符串转化为lambda表达式的公共类.StringToLambda 使用方式如下: var module = new Module(); url = url.ToLower();/ ...
- array_multisort函数,以及多维数组下排序的应用,并与usort函数对比
以前比较少用这个函数,大部分自己接触的业务里,处理稍微大一些的数组的时候几乎都是从db里取出来的,在db里就order by了. 最近倒是用了次,这个函数用来排序很强大,有点类似于sql中的order ...
- AbelSu玩Kotlin
Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者. Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrain ...
- Java面试题,Java三大特性之一——多态的理解
首先我们知道Java是一门面向对象的语言 面向对象三大特性,封装.继承.多态. 封装.继承.多态 ↓ 无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的.因为封装好了才能继承, ...
- WPF EventTrigger,BeginStoryboard
<Window x:Class="WpfApplication2.LoginWind" xmlns="http://schemas.microsoft.com/wi ...
- 20155313 杨瀚 《网络对抗技术》实验八 Web基础
20155313 杨瀚 <网络对抗技术>实验八 Web基础 一.实验目的 1.Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含 ...