哈希表—acwing

server/2024/11/27 16:02:07/

一、题目:模拟散列表

840. 模拟散列表 - AcWing题库

分析 

代码(哈希表的拉链存储结构)

// 哈希表拉链法存储结构
#include<bits/stdc++.h>
using namespace std;const int N = 1e5+3;
// 拉链结构
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;
}int main() {int n;cin >> n;memset(h,-1,sizeof h);while(n --) {char op; int x;cin >> op >> x;if(op == 'I') insert(x);else {if(find(x)) puts("Yes");else puts("No");}}return 0;
}

代码 (开放寻址存储结构)

#include<bits/stdc++.h>
using namespace std;const int N = 2e5+3, null = 0x3f3f3f3f;int h[N];int find(int x) {int k = (x%N + N)%N;// 坑位不空,且坑位不是查找值while(h[k]!=null && h[k]!=x) {k ++;if(k == N) k = 0; //往后坑位满了,循环到前面继续坑位}return k;
}int main() {int n;cin >> n;memset(h,0x3f,sizeof h);while(n --) {char op; int x;cin >> op >> x;// 返回坑位int k = find(x);if(op == 'I') h[k] = x;else {if(h[k]!=null) puts("Yes");else puts("No");}}return 0;
}

代码(stl——set)

#include<bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;set<int> a;while(n --) {char op;cin >> op;int x; cin >> x;if(op == 'I') a.insert(x);else {if (a.count(x)) puts("Yes");else puts("No");}}return 0;
}

二、题目:字符串哈希

841. 字符串哈希 - AcWing题库

 

代码1(string 的substr暴力)

TLE了 13个数据过11个

#include<bits/stdc++.h>
using namespace std;int n, m;
string s;int main() {cin >> n >> m;cin >> s;while(m --) {int l1,r1,l2,r2;cin >> l1 >> r1 >> l2 >> r2;string s1, s2;s1=s.substr(l1-1,r1-l1+1);s2=s.substr(l2-1,r2-l2+1);if(s1 == s2) puts("Yes");else puts("No");}return 0;
}

分析

代码2(字符串哈希)字符串前缀哈希法

#include<bits/stdc++.h>
using namespace std;typedef unsigned long long ull;
const int N = 1e5+10, P = 131; // 进制pint n, m;
char str[N];
ull h[N], p[N]; // 哈希表,和p底数表
// 取[l,r]区间哈希值
ull get(int l, int r) {return h[r] - h[l-1]*p[r-l+1];
}int main() {cin >> n >> m >> str+1; // 从1开始,不取0,因为0不好,会冲突p[0] = 1;// 递推 建哈希表for(int i = 1; i <= n; i ++) {p[i] = p[i-1]*P;h[i] = h[i-1]*P + str[i];}// 取两区间哈希值while(m --) {int l1, r1, l2, r2;cin >> l1 >> r1 >> l2 >> r2;if(get(l1,r1)==get(l2,r2)) puts("Yes");else puts("No");}return 0;
}


http://www.ppmy.cn/server/145369.html

相关文章

占用磁盘100%?Apache DolphinScheduler 日志如何定时清理!

当 Apache DolphinScheduler 运行几个月后&#xff0c;大部分朋友会发现 Logs 下的运行日志越来越多&#xff0c;这时可以考虑清理下 Logs/ 目录下的日志文件&#xff0c;比如设置只保留最近 3 天的日志&#xff0c;怎么操作呢&#xff1f; 可以通过执行以下三个命令来实现&…

获取字 short WORD 上指定的位是否有效

/// <summary> /// 获取字 short WORD 上指定的位是否有效 /// </summary> /// <param name"val"></param> /// <param name"bit"></param> /// <returns></returns> public boo…

使用Java代码操作Kafka(五):Kafka消费 offset API,包含指定 Offset 消费以及指定时间消费

文章目录 1、指定 Offset 消费2、指定时间消费 1、指定 Offset 消费 auto.offset.reset earliest | latest | none 默认是 latest &#xff08;1&#xff09;earliest&#xff1a;自动将偏移量重置为最早的偏移量&#xff0c;–from-beginning &#xff08;2&#xff09;lates…

分布式查询处理优化之数据分片

基本的数据分布策略 数据分片 分片是将分布式数据库的全局数据逻辑划分为关系片段并且进行实际的物理分配的过程。不同的分布式系统有着不同的分片策略。 关系数据库主要通过数据分片技术对全局数据进行逻辑划分和实际的物理分配。考虑的主要因素&#xff1a;数据的模式特征…

一篇文章读懂 Prettier CLI 命令:从基础到进阶 (3)

Prettier 命令行工具 Prettier 提供了一个强大的命令行界面 (CLI)&#xff0c;允许用户通过命令行来格式化代码。在 package.json 中&#xff0c;你可以配置一个脚本来运行 Prettier&#xff0c;例如&#xff1a; "scripts": {"format": "prettier …

构建与优化数据仓库-实践指南

数仓构建流程 下图为MaxCompute数据仓库构建的整体流程。 基本概念 在正式学习本教程之前&#xff0c;您需要首先理解以下基本概念&#xff1a; 业务板块&#xff1a;比数据域更高维度的业务划分方法&#xff0c;适用于庞大的业务系统。 维度&#xff1a;维度建模由Ralph Ki…

【人工智能基础】自然语言处理基础

文章目录 一. 语言模型基本概念1. n-gram模型2. 评价指标2.1. 困惑度2.2. 交叉熵 3. 训练中的特殊字符3.1. OOV问题&#xff1a;处理模型未见过的字符3.2. 起始字符&#xff1a;起始出现概率的处理 4. 字模型与词模型5. 中英文差别 二. 向量语义1. 词向量1.1. 相似度&#xff1…

热门金融大模型整理

FinRobot &#xff08;开源&#xff09; FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models FinRobot&#xff0c;一个支持多种金融专用 AI 代理的开源平台&#xff0c;每个代理均由 LLM 驱动。平台架构包括&#xff1a;金…