~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)
(1) 拉链法
int h[N], e[N], ne[N], idx;// 向哈希表中插入一个数
void insert(int x)
{int k = (x % N + N) % N;e[idx] = x;ne[idx] = h[k];h[k] = idx ++ ;
}// 在哈希表中查询某个数是否存在
bool find(int x)
{int k = (x % N + N) % N;for (int i = h[k]; i != -1; i = ne[i])if (e[i] == x)return true;return false;
}
(2) 开放寻址法
int h[N];// 如果x在哈希表中,返回x的下标;如果x不在哈希表中,返回x应该插入的位置
int find(int x)
{int t = (x % N + N) % N;while (h[t] != null && h[t] != x){t ++ ;if (t == N) t = 0;}return t;
}
模板题
模拟散列表
题目描述:
维护一个集合,支持如下几种操作:
“I x”,插入一个数x;
“Q x”,询问数x是否在集合中出现过;
现在要进行N次操作,对于每个询问操作输出对应的结果。
输入格式
第一行包含整数N,表示操作数量。
接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。
输出格式
对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。
每个结果占一行。
数据范围
1≤N≤105
−109≤x≤109
输入样例:
5
I 1
I 2
I 3
Q 2
Q 5
输出样例:
Yes
No
C++代码如下:
#include <iostream>
using namespace std;
const int mod = 100003,maxn = 200005;
int h[maxn];
int find(int x){int t = (x % mod + mod) % mod;while(h[t] && h[t] != x) t++;return t;}
int main(){int n,x;cin>>n;char op;while(n--){cin>>op>>x;if(op == 'I') h[find(x)] = x;else cout<<(h[find(x)] == x ? "Yes" : "No")<<endl;}return 0;
}
~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)相关推荐
- ~~队列(数据结构)(附模板题 AcWing 829. 模拟队列)
1. 普通队列: // hh 表示队头,tt表示队尾 int q[N], hh = 0, tt = -1;// 向队尾插入一个数 q[ ++ tt] = x;// 从队头弹出一个数 hh ++ ;// ...
- AcWing 840. 模拟散列表(散列hash)
题目连接 https://www.acwing.com/problem/content/description/842/ 思路 使用开放寻址法,思路大概是这样我们讲要查询的数模上一个大于n的质数,然后 ...
- ~~字符串哈希(数据结构)(附模板题AcWing 841 字符串哈希)
核心思想: 将字符串看成P进制数,P的经验值是131或13331,取这两个值的冲突概率低. 小技巧: 取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果. ...
- ~~堆(数据结构)(附模板题 AcWing 838. 堆排序)
模板 // h[N]存储堆中的值, h[1]是堆顶,x的左儿子是2x, 右儿子是2x + 1 // ph[k]存储第k个插入的点在堆中的位置 // hp[k]存储堆中下标是k的点是第几个插入的 int ...
- ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)
模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...
- 哈希表(模拟散列表 字符串哈希)
目录 一.哈希表的概念 二.模拟散列表 题目 代码实现 ①拉链法 ②开放寻址法 三.字符串哈希 题目 思路 注意点 代码实现 一.哈希表的概念 哈希表(又称为散列表),将一个比较大的值域映射到一个小的 ...
- 匈牙利算法——最大匹配问题详解(附模板题)
基本概念转自 https://blog.csdn.net/dengheCSDN/article/details/77619308 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名. ...
- 二维前缀和(附模板题)
模板 S[i, j] = 第i行j列格子左上部分所有元素的和 以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为: S[x2, y2] - S[x1 - 1, y2] - S[x2, ...
- ~~二维差分(附模板题)
模板 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c: S[x1, y1] += c, S[x2 + 1, y1] -= c, S[x1, y2 + 1] -= c, ...
最新文章
- 着眼未来!2019未来杯高校AI挑战赛圆满落幕
- Hadoop家族学习路线图--转载
- Halcon - 测量 - 轮廓到线的距离
- textmetric结构
- 思科路由器全局、接口、协议调试(下)
- 一个IT人的非典型职场十年 (5)
- Android软键盘弹出时,覆盖布局,不是把布局顶上去的解决方法
- 【LeetCode笔记】剑指 Offer 59 - II. 队列的最大值(Java、辅助队列)
- 利用SNMP4J实现 Snmp Trap 完整例子
- android 3.0 m3u8,在Android中播放m3u8视频
- 插入排序算法--Java实现
- Uber和Lyft推个人验证PIN码功能降接送混乱
- 华为交换机查看当前配置
- c# chart 各个属性_C#之Chart控件系列教程
- linux wine 原理,wine的工作原理与自动运行PE程序
- VMVare 安装centos系统时,界面显示不全
- Android Studio的安装 环境搭建
- asp毕业设计——基于asp+access的档案管理系统设计与实现(毕业论文+程序源码)——档案管理系统
- 错误 You've successfully authenticated, but Gitee.com does not provide she access.
- 关于this引用逸出的理解