c++算法学习笔记 (20) 哈希表

1.模拟散列表
// 拉链法
#include <bits/stdc++.h>
using namespace std;
const int N = 100003;
int h[N];
int e[N], ne[N], idx; // 存链void insert(int x)
{int k = (x % N + 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--){string op;int x;cin >> op >> x;if (op == "I"){insert(x);}else{if (find(x))cout << "Yes" << endl;elsecout << "No" << endl;}}
}
// 开放寻址法
#include <bits/stdc++.h>
using namespace std;
const int N = 200003, 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; // 若x在表中,则返回x的位置;若不在,则返回应该在的位置
}
int main()
{int n;cin >> n;memset(h, 0x3f, sizeof h);while (n--){string op;int x;cin >> op >> x;if (op == "I"){int k = find(x);h[k] = x;}else{int k = find(x);if (h[k] != null)cout << "Yes" << endl;elsecout << "No" << endl;}}
}
 2.字符串哈希

给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2]这两个区间所包含的字符串子串是否完全相同。

字符串中只包含大小写英文字母和数字。

输入格式

第一行包含整数 n 和 m,表示字符串长度和询问次数。

第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。

接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。

注意,字符串的位置从 1 开始编号。

输出格式

对于每个询问输出一个结果,如果两个字符串子串完全相同则输出 Yes,否则输出 No

每个结果占一行。

数据范围

1≤n,m≤10^5

输入样例:

8 3
aabbaabb
1 3 5 7
1 3 6 8
1 2 1 2

输出样例:

Yes
No
Yes
// 字符串哈希  快速判断两个字符串是否相等
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N = 100010, P = 131; // P进制,这里131为经验值,使几乎无冲突
int n, m;
char str[N];
ull h[N], p[N]; // h:前缀的哈希值ull get(int l, int r)
{return h[r] - h[l - 1] * p[r - l + 1]; // r到l的哈希值
}int main()
{cin >> n >> m >> str + 1;p[0] = 1;for (int i = 1; i <= n; i++){                        // 预处理前缀和p[i] = p[i - 1] * P; // 存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");elseputs("No");}return 0;
}

 

(上图作者:chocolate-emperor      链接:https://www.acwing.com/solution/content/24738/)
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传动设计选型

一. 齿轮选型 1齿轮传动概述 齿轮传动首先自然是一对对的&#xff0c;故也叫齿轮副。原理其实大家基本都知道&#xff0c;很多玩具中都会有齿轮传动的身影&#xff0c;比如小时候玩的四驱车。就是两齿轮互相啮合互相推动&#xff0c;然后输出旋转动力或者改变传递动力的方向&…

基于SpringBoot Vue学生信息管理

一、&#x1f4dd;功能介绍 基于SpringBoot Vue学生信息管理 角色&#xff1a;管理员、学生、教师 管理员&#xff1a;管理员进入主页面&#xff0c;主要功能包括对系统首页、个人中心、学生管理、教师管理、公告通知管理、课程类型管理、课程信息管理、选课信息管理、课程成…

使用STM32实现 蓝牙插座

硬件介绍 蓝牙模块HC-01 蓝牙模块&#xff0c;又叫做蓝牙串口模块 串口透传技术&#xff1a;透传即透明传送&#xff0c;是指在数据的传输过程中&#xff0c;通过无线的方式这组数据不发生任何形式的改变&#xff0c;仿佛传输过程是透明的一样&#xff0c;同时保证传输的质量&…

农业地物反演采用卫星影像技术方法

一、引言 随着空间技术的快速发展&#xff0c;卫星影像已经成为一种重要的工具&#xff0c;用于提供全球尺度的数据收集和分析。在农业领域&#xff0c;卫星影像被广泛应用于植物反演&#xff0c;以获取关于作物生长和健康的实时信息。本文旨在全面概述卫星影像在农业植物反演中…

baseline SE SP YI是什么?

SE、SP和YI是评估分类模型性能时常用的几个统计指标&#xff0c;特别是在医学影像处理、疾病诊断等领域&#xff0c;这些指标帮助了解模型对于正负类样本的识别能力。 SE (Sensitivity)&#xff0c;也称为真正率&#xff08;True Positive Rate, TPR&#xff09;或召回率&#…

鸿蒙ArkUI实例:【自定义组件】

组件是 OpenHarmony 页面最小显示单元&#xff0c;一个页面可由多个组件组合而成&#xff0c;也可只由一个组件组合而成&#xff0c;这些组件可以是ArkUI开发框架自带系统组件&#xff0c;比如 Text 、 Button 等&#xff0c;也可以是自定义组件&#xff0c;本节笔者简单介绍一…

hive词频统计---文件始终上传不来

目录 准备工作&#xff1a; 文件内容&#xff1a; 创建数据库及表 将文件上传到&#xff1a;上传到/user/hive/warehouse/db1.db/t_word目录下 hive里面查询&#xff0c;始终报错&#xff1a;&#xff08;直接查询也是不行&#xff09; 解决方案&#xff1a; 准备工作&am…

OPC UA遇见chatGPT

最近opc 基金会将召开一个会议&#xff0c;主题是”OPC UA meets IT“。由此可见&#xff0c;工业自动化行业也开始研究和评估chatGPT带来的影响了。 本文谈谈本人对OPC UA 与chatGPT结合的初步实验和思考。 构建OPC UA 信息模型 chatGPT 的确非常强大了&#xff0c;使用自然…

Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代

文章目录 概要Stable Diffusion 底层结构与原理文本编码器&#xff08;Text Encoder&#xff09;图片生成器&#xff08;Image Generator&#xff09; 那扩散过程发生了什么&#xff1f;stable diffusion 总体架构主要模块分析Unet 网络采样器迭代CLIP 模型 小结 概要 Stable …

C++设计模式:装饰器模式(四)

1、定义与动机 装饰器模式定义&#xff1a;动态&#xff08;组合&#xff09;地给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码 & 减少子类个数&#xff09;。 在某些情…

如何理解CDN?说说实现原理?

文章目录 一、是什么二、原理分析负载均衡系统缓存代理 三、总结参考文献 一、是什么 CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络 构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内…

成为一个ATE工程师是什么体验?

当你成为ATE工程师&#xff0c;是什么感受&#xff1f; 按照业内资深工程师的玩笑话来说&#xff1a;整的是比劳斯莱斯还贵的设备&#xff0c;更高端的机台顶得起上海几套房。 1、什么是ATE测试&#xff1f; 一颗芯片的生命周期始于市场需求&#xff0c;从产品的定义与设计&…

蓝桥杯-dfs搜索模板题(一)

蓝桥杯-dfs搜索模板题&#xff08;一&#xff09; P2089 烤鸡P1088 火星人P1149 火柴棒等式P2036 PERKETP1135 奇怪的电梯结语 P2089 烤鸡 对于每个位置枚举数字 #include<bits/stdc.h>using namespace std;const int N1010;int n;int arr[N];//临时方案 int res0;//方案…

163 Linux C++ 通讯架构实战17,本地套接字整理对比,IPC:pipe,fifo,mmap,信号,本地套

IPC&#xff1a; Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲…

并发编程三大特性之可见性

一、什么是可见性&#xff1f; 可见性问题是基于CPU位置出现的&#xff0c;cpu处里速度非常快&#xff0c;相对CPU来说去主内存 获取数据这个事情太慢了&#xff0c;CPU就提供了 L1&#xff0c;L2&#xff0c;L3的三季缓存&#xff0c;每次去主内存拿完 数据后&#xff0c;数据…

使用LIKE进行模糊查询

查询包含字符‘e’的信息 % 代表不确定个数的字符&#xff08;零个或多个&#xff09; SELECT employee_id, first_name FROM employees WHERE first_name LIKE %e%; 查询以字符‘e’开头的字符 SELECT employee_id, first_name FROM employees WHERE first_name LIKE e%; _…

腾讯云2024年优惠券领取及使用常见问题

腾讯云作为国内领先的云计算服务提供商&#xff0c;经常会推出各种优惠活动&#xff0c;以此来吸引用户上云。其中&#xff0c;优惠券作为一种常见的促销方式&#xff0c;受到了众多用户的青睐。然而&#xff0c;在领取和使用优惠券的过程中&#xff0c;大家可能会遇到一些常见…

1.《C语言》—— [常见概念]

前言: C语言是学习编程的一门语言&#xff0c;C语言概念少&#xff0c;词汇少&#xff0c;包含了基本的编程元素&#xff0c;再后来的很多语言如&#xff08;C&#xff0c;Java&#xff09;等都参考了C语言&#xff0c;所以想要学好编程&#xff0c;C语言是必不可少的一门&…

77、WAF攻防——权限控制代码免杀异或运算变量覆盖混淆加密传参

文章目录 WAF规则webshell免杀变异 WAF规则 函数匹配 工具指纹 webshell免杀变异 php 传参带入 eval可以用assert来替换,assert也可以将字符串当作php代码执行漏洞 php 变量覆盖 php 加密 使用加密算法对php后门进行加密 php 异或运算 简化:无字符webshellP 无数字字母rc…

《米小圈上学记》——让孩子爱上阅读一点也不难!

阅读能力的培养是小学语文素质教育重要的组成部分&#xff0c;阅读能力的高低&#xff0c;直接关系到学生的理解能力、运用知识的能力以及表达能力的提升。提高小学生的阅读能力不仅关系到小学生语文素养的培养&#xff0c;而且对他们开阔视野、提高内涵、增加底蕴、放飞心灵有…