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 ...
随机推荐
- Maven配置setting.xml值Mirror与Repository区别
1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...
- PAT B1010 一元多项式求导 (25 分)
设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为nxn−1.) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数).数字间以空格分隔. ...
- loadrunner中pacing设置01
之前一直也用pacing值来调节TPS,一直觉得它和think time没啥区别.这次项目中,和同事就此展开了讨论,细细一研究发现pacing值门道还是很多的. 如下面三个图: 上图是pacing的三 ...
- Android 调用手机上第三方百度地图并传值给地图
//移动APP调起Android百度地图方式举例 Intent intent = null; try { // intent = Intent.getIntent("intent://map ...
- jqgrid 启用键盘操作bindKeys
给jqgrid启用键盘操作,代码如下: // the bindKeys() 启用键盘操作 $("#jqGrid").jqGrid('bindKeys'); 启动后,比如可以使用上下 ...
- AbelSu教你搭建go语言开发环境
go语言官网:https://golang.org/ windows:官网下载go1.6.windows-amd64.msi安装文件,安装位置选择默认C:\Go\安装结束后配置环境变量Path: C: ...
- odoo创建编号
def create(self,cr,uid,vals,context=None): if context is None: context ={} print 111111 print vals[] ...
- odoo之显示前端,数据,可选择
def create(self,cr,uid,vals,context=None): if context is None: context ={} if vals.get('name','/')== ...
- Verilog使用相对路径时应注意的问题
在Quartus编译环境下,使用include, fopen等文件操作指令时,会涉及到文件路径问题. 以 E:\quartus_project\sd_card_controller\rtl\sd_wb ...
- Spring集成Swagger,Java自动生成Api文档
博主很懒... Swagger官网:http://swagger.io GitHub地址:https://github.com/swagger-api 官方注解文档:http://docs.swagg ...