1145 Hashing - Average Search Time
目录
思路
样例解释
AC代码
思路
要做出这道题必须直到除留余数法和平方探测法的原理。
除此之外有两个注意点:
1. 在查找时,如果当前位置上不是要找的数会继续找下去(如果k没超过表长的话),但是如果当前位置上是0,说明表里就是没有这个数,不必再往下找。
2. 在存储时,k的取值范围是[0,Tsize)而在查找时是[0,Tsize],我认为后者也应该是左闭右开,但是要做出这道题就得按照它的规则。
样例解释
表长4不是一个素数,取大于4的第一个素数5作为表长。
有table[5] = {0,0,0,0,0}
对于10:10%5 == 0,table[0]是空的,可以插入,更新table[5] = {10,0,0,0,0}
对于6:6%5 == 1,table[1]是空的,可以插入,更新table[5] = {10,6,0,0,0}
对于4:4%5 == 4,table[4]是空的,可以插入,更新table[5] = {10,6,0,0,4}
对于15:15%5 == 0,table[0]非空,(15+1^2)%5 == 1,table[1]非空,(15+2^2)%5 == 4,table[4]非空,(15+3^2)%5 == 4,(15+4^2)%5 == 1,4已经是表长减一,所以插不进去了。
对于11:11%5 == 1,table[1]非空,(11+1^2)%5 == 2,table[2]是空的。更新table[5] = {10,6,11,0,4}。
最终的存储情况是 {10,6,11,0,4}。
下面开始查询
对于11:11%5 == 1 ,table[1]存储的是6,(11+1^2)%5 == 2,table[2]存储的是11,2次找到。
对于4:4%5 == 4,table[4]存储的是4,1次找到。
对于15:15%5 == 0,没找到,(15+1^2)%5 == 1,没找到,(15+2^2)%5 == 4,没找到,(15+3^2)%5 == 4,没找到,(15+4^2)%5 == 1,没找到,5次。
对于2:2%5 == 2,没找到,(2+1^2)%5 == 3,没找到,注意3号位存储的为空,不必再往下找了。2次。
共计11次。
AC代码
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cmath>using namespace std;const int maxn = 1010;bool isPrime(int x){if(x==1)return false;for(int i=2;i<=sqrt(x);i++){if(x%i==0)return false;}return true;
}int main(){ int Tsize,inN,outN;cin>>Tsize>>inN>>outN;if(isPrime(Tsize)==false){while(isPrime(Tsize)==false){Tsize ++;}}int Table[Tsize] = {0}; while(inN--){int x;cin>>x;int k;for(k=0;k<Tsize;k++){int idx = (x+k*k)%Tsize;if(Table[idx]==0){Table[idx] = x; break;}}if(k==Tsize)printf("%d cannot be inserted.\n",x);}int tt = 0;//total timefor(int i=0;i<outN;i++){int x;cin>>x;for(int k=0;k<=Tsize;k++){tt ++;int idx = (x+k*k)%Tsize;if(Table[idx]==x||Table[idx]==0)break; }}printf("%.1f",tt*1.0/outN);return 0;
}
1145 Hashing - Average Search Time相关推荐
- PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数
文章目录 题目分析 题目链接 题目分析 来源:acwing 本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表.哈希表开放寻址法.二次探测法链接的题目就是让建立h ...
- 1145. Hashing - Average Search Time (25)
1145. Hashing - Average Search Time (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...
- 平均查找长度(Average Search Length)
2019-08-27 轻松解决不同关键字序列构成的二叉排序树ASL(平均查找长度)(成功)不同问题
- PAT日志 1145
顽强的小白 1145 Hashing - Average Search Time (25 分) The task of this problem is simple: insert a sequenc ...
- PAT甲级题目翻译+答案 AcWing(哈希表)
1048 Find Coins (25 分) 题意 : 给一序列,要求从中选出两个值使得它们的和恰好等于m,输出第一个值字典序最小且升序的方案 思路 : 看似O(n2)O(n^2)O(n2),其实可以 ...
- 【PAT甲级真题整理五】1121~1155
终于考完了qaq把最后一堆也整理出来了 目录 1121 Damn Single(25)set.map的使用 1122 Hamiltonian Cycle(25)哈密顿回路 1123 Is It a C ...
- 2020年9月PAT甲级满分必备刷题技巧
2020年7月的考试结束了,除了本次的考题更新,短期内不会更新. [7月题目的特点:首次线上考试,没出链表.树相关的模板题,第2到4题背景新颖,大大降低了抄袭历年代码的可能性,可以看作是线上考试的新趋 ...
- 刷PAT甲级的各题思路、细节以及遇到的问题记录
1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...
- 多位点序列分型_细菌多位点序列分型(Multilocus sequence typing,MLST)的原理及分型方法...
摘 要: 多位点序列分型(MLST)是一种基于核酸序列测定的细菌分型方法,通过PCR扩增多个管家基因内部片段,测定其序列,分析菌株的变异,从而进行分型.MLST被广泛应用于病原菌.环境菌和真核生物中. ...
最新文章
- IE和Firefox在JS方面的不兼容及统一方法总结
- Warm Up before Exercise
- javascript数据结构-介绍
- java设计模式3--单例模式(Singleton)
- 数据结构--队列Queue--循环顺序队列
- 【VSCode - Vetur 插件报错】Cannot find module ‘XXX‘ or its corresponding type declarations.Vetur(2307)
- Aspose.Cells Smart markers 基于模板导出Excel
- typora插入代码设置_五分钟快速上手神器Typora
- 判断release模式_AbstractQueuedSynchronizer共享模式与基于Condition的等待/通知
- python安装库pandas_安装python的第三方库 geopandas
- GhostCat - AS3工具类库(AS3 library of generic tools)
- 【React Native 安卓开发】----(Flexbox布局)【第二篇】
- c语言课后题第一章答案,C语言教材课后习题(含答案)
- 禁用的灰色文本框、按钮的克星
- matlab 图像分割并填充颜色
- 学习mescroll的下拉刷新、上拉加载
- 基于simulink的模糊PID控制器设计与仿真
- 微信小程序-模拟器某些页面空白-引用 VantUI 后,页面空白
- Flutter 和 Dart 开发中一些技巧和坑点填坑指南详解
- html中首行缩进两个字符