文章目录

  • 题目分析
  • 题目链接

题目分析



来源:acwing

本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法链接的题目就是让建立hash表,没有输出查询时间,所以是这道题的简单版。

关于统计时间(即统计次数),也是放在了find()函数中,即插入的时候的比较次数就是查询时候的次数,所以在find函数中加了一个形参cnt用来统计次数。以便后面查询输出。

ac代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;int s , m , n;int h[N];
bool is_prime(int n){if(n == 1) return false;for(int i =2; i<= n/i ;i++)if( n % i ==0) return false;return true;
}//查找x在哈希表中的位置,cnt统计比较了多少次
int find(int x, int &cnt){//hash值int t = x %s;//统计插入多少次,即查找多少次cnt =1;//这里cnt包含特例:如果查找了 TSize 次,每次查找的位置上均有数,但都不等于要查找的数,则认为查找时间是 TSize+1。for(int k =0; k<s; k++,cnt++){//寻找二次探测法的冲突解决位置int i = (t+ k*k) % s;//如果这个位置是空的 || 查询到了这个数,就返回这个位置iif(!h[i] || h[i] == x ) return i;}// 无法插入 或者 差不多就返回-1return -1;
}
int main(){cin >> s >> n >> m;while(!is_prime(s)) s++;//插入数字,建立hash表for(int i =0; i< n; i++){int x,cnt;cin >> x;int t = find(x, cnt);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;cin >> x;find(x, count);cnt += count;}printf("%.1lf",(double)cnt/m);
}

题目链接

PAT甲级1145 Hashing - Average Search Time
https://www.acwing.com/problem/content/1640/

PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数相关推荐

  1. 1145. Hashing - Average Search Time (25)

    1145. Hashing - Average Search Time (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...

  2. PAT甲级1062 Talent and Virtue:[C++题解]结构体、哈希表

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 分4个vector,单独排序即可. ac代码 #include<bits/stdc++.h> using namespa ...

  3. 1145 Hashing - Average Search Time

    目录 思路 样例解释 AC代码 思路 要做出这道题必须直到除留余数法和平方探测法的原理. 除此之外有两个注意点: 1. 在查找时,如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话),但是如 ...

  4. PAT甲级1108 Finding Average :[C++题解]stof、字符串变成浮点数、try和catch捕获异常、C++语法题

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: C++中有函数stoi表示把string 变成int,还有函数stof,表示把string变成float.如果是合法数字的话,sto ...

  5. PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...

  6. PAT甲级1064 Complete Binary Search Tree (30分):[C++题解]完全二叉搜索树BST

    文章目录 题目分析 题目链接 题目分析 思路: 第一步,构造含有n个结点的完全二叉树:第二步,将n个数值填入,使其满足二叉搜索树的性质. 对于第一步: 完全二叉树用一维数组可以存下,不过从根结点的下标 ...

  7. PAT甲级1125 Chain the Ropes:[C++题解]贪心、优先队列、合并果子

    文章目录 题目分析 题目来源 题目分析 来源:acwing 板子题:合并果子合并果子优先队列 分析:贪心策略是: 每次取最短的两条绳子a和b.该两条绳子合并为1条绳子,且长度变为a+b2\frac{a ...

  8. PAT甲级1113 Integer Set Partition:[C++题解]贪心

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 集合元素个数之差为0或1.两个集合元素之和,分别取最大的n1个数,和剩下的所有的数. ac代码 #include<bits/s ...

  9. PAT甲级1147 Heaps (30 分):[C++题解]堆、树的遍历、dfs、完全二叉树建树

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析:给定完全二叉树,判断是否是堆,需要区分大根堆,小根堆.后面是输出后序遍历. AC代码 #include<bits/stdc++. ...

最新文章

  1. jquery按钮禁用(全)
  2. mysql数据库三级分类_5.在 MySQL数据库中,以下数据库对象与数据库三级模式对应关系正确的是?...
  3. 2B.处女座与cf(C++)
  4. 一根Express Route同时支持ARM和ASM的VNET
  5. 深入解析PHP中逗号与点号的区别
  6. JVM调优系列:(二)JVM运行时数据区域
  7. Ajax知识笔记——入门,同步和异步,XHR
  8. 程序设计语言基础-知识点
  9. es5如何实现promise_ES5实现Promise(1) - 事件循环机制
  10. Linux学习-逻辑滚动条管理员 (Logical Volume Manager)
  11. python学习——基础信息
  12. 例题5-3 安迪的第一个字典 UVa10815
  13. MAVROS的plugin到底是什么意思?plugin中文意思是插件
  14. mysql 统计不同成绩阶段的人数
  15. 【Unity连载】斗兽棋-棋类游戏开发演示(2)
  16. dbca silent方式建库
  17. Linux使用Android的USB共享网络
  18. 计蒜客 T1817 分解质因数(数论)
  19. Jetson AGX Orin刷机教程
  20. mysql数据库表分区

热门文章

  1. USACO_2_3_Controlling Companies
  2. android ondestroy service,android – 在onDestroy()之后仍然运行的IntentService onHandleIntent()...
  3. 第九章 神经网络学习-机器学习老师板书-斯坦福吴恩达教授
  4. 8.5 特征选择-机器学习笔记-斯坦福吴恩达教授
  5. STM32 电机教程 7 - 步进电机开环速度控制
  6. 一起学nRF51xx 20 -  移植SDK蓝牙例程
  7. C++中类的多态与虚函数的使用(转)
  8. 降息大法好!银行4.35%消费贷了解一下?
  9. 【DIY】一个名叫“故事鸡”的儿童玩具是如何用树莓派3B+练成的
  10. C1之路 | 训练任务01-进制与信息编码