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,一经查实,立即删除!

相关文章

Spring自定义事件处理完全解析!2024美团春招面试题大全,超详细解答,必备收藏!

在2024年的技术招聘季中&#xff0c;随着Spring框架在企业开发中的广泛应用&#xff0c;对Spring框架深入理解和应用能力的需求日益增长。美团作为中国领先的生活服务电子商务平台&#xff0c;对技术人才的要求尤为严格&#xff0c;特别是在Spring框架的应用上。Spring自定义事…

如何确保正向代理处理的安全性?

确保正向代理的安全性是至关重要的&#xff0c;因为代理服务器作为中介&#xff0c;处理客户端和目标服务器之间的通信。以下是一些关键步骤和最佳实践&#xff0c;以确保正向代理的安全性&#xff1a; 1、访问控制&#xff1a; 1、使用访问控制列表&#xff08;ACL&#xff…

传动设计选型

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

浏览器插件自动化插件 Tampermonkey autojs 区别,脱离手动操作,代替人工操作

Tampermonkey autojs 区别 修改复制 Tampermonkey 和 AutoJS 都是浏览器扩展程序&#xff0c;用于在浏览器上运行 JavaScript 脚本。它们的主要区别在于&#xff1a; Tampermonkey 是一个通用的脚本管理器&#xff0c;支持多种浏览器&#xff0c;包括 Chrome、Firefox、Safar…

基于SpringBoot Vue学生信息管理

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

输出各位数字之和能被15整除的所有数

输出各位数字之和能被15整除的所有数 输出100到1000之间的各位数字之和能被15整除的所有数&#xff0c;输出时每5个一行&#xff0c;每个数输出占4列列宽。 public class Day5 {public static void main(String[] args) {int t,flag0;for(int i100;i<1000;i){t (i/100)(i…

使用STM32实现 蓝牙插座

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

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

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

【排序,找规律,站队型】

茵茵所在的合唱队共有N个人&#xff08;N为奇数&#xff09;。为了准备一次演出&#xff0c;老师开始为她们安排合唱队形了。大家都知道&#xff0c;合唱队形通常是中间高两端低的。老师是这样安排他们的队形的&#xff1a;先让所有的同学按高个儿在前的顺序排成一队。然后&…

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;本节笔者简单介绍一…

《LeetCode力扣练习》代码随想录——二叉树(二叉搜索树的最小绝对差---Java)

《LeetCode力扣练习》代码随想录——二叉树&#xff08;二叉搜索树的最小绝对差—Java&#xff09; 刷题思路来源于 代码随想录 530. 二叉搜索树的最小绝对差 二叉树-中序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* T…

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;通过中心平台的负载均衡、内…

【开启自启动】软件设置开机自启动的相关问题

。 。 。 。 。 。 。 。 1、这个是设置开启自动启动的代码 //这个是设置开启自动启动的代码 #define REG_RUN_MANAGE "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run" //#define REG_RUN_MANAGE "HKEY_LOCAL_MACHINE\…

Wooden Toy Festival 题解

Wooden Toy Festival题解 题目在这 题目在这 题目在这 思路 &#xff1a; &#xff1a; &#xff1a; 二分&#xff0c;二分距离&#xff0c;首先肯定要排序&#xff0c;然后这题还得去一下重(因为题目说了"雕刻师们都是非常熟练的人&#xff0c;可以同时为不同的人完成…

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

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