关于一些哈希

news/2024/12/26 3:38:16/文章来源:https://www.cnblogs.com/meteor2008/p/18553672

随缘更新,但考虑到马上要退役,毕业前应该没机会力。

求字符串的最长公共前缀

标准

空间复杂度\((\sum_i |s_i|)\),但根据具体场景通常可以缩小至\(O(n)\)
时间复杂度\(O(\sum_i |s_i|)\)预处理,\(O(\log min(|s_i|,|s_j|))\)求两字符串的最长公共前缀

对于每个字符串,预处理其前缀hash数组。查询时二分找到最小的位置mid,令hash(i,mid)=hash(j,mid)。

使用这个技巧的题目,时间复杂度可能为\(O(n\log n)\)

变形

以TJOI2017 DNA为例。

题目描述

加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列 \(S\),有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列 \(S\),任意修改其中不超过 \(3\) 个碱基,依然能够表现出吃藕的性状。现在研究人员想知道这个基因在 DNA 链 \(S_0\) 上的位置。所以你需要统计在一个表现出吃藕性状的人的 DNA 序列 \(S_0\) 上,有多少个连续子串可能是该基因,即有多少个 \(S_0\) 的连续子串修改小于等于三个字母能够变成 \(S\)

对于 \(100\%\) 的数据,\(S_0,S\) 的长度不超过 \(10^5\)\(0\lt T\leq 10\)

做法

二分哈希,找到前三个需要修改的字符(即无法匹配之处),判断剩余部分是否可以匹配。

取出整段哈希中的一个区间

标准

不知道怎么描述,看代码差不多就能理解吧!

#define lld unsigned long long
// 这是个不太好的习惯,最好用ull表示……
const lld base = 233, mod = 1e9+7; // 貌似自然溢出也很好
lld hash[N], bw[N]; // hash有撞函数的可能,实际写代码时建议换一个函数名lld get(int l, int r){ // 取区间[l,r]的哈希值return (hash[r]-hash[l-1]*bw[r-l+1]%mod+mod)%mod;
}int main(){bw[0] = 1, hash[0] = 0;for(int i = 1; i <= n; i++){ // 预处理hash[i] = (hash[i-1]*base%mod+s[i])%mod;bw[i] = bw[i-1]*base%mod;}
}

例题

[ARC172C] Election:差不多就是板子的意味,但是比起板子,可以更快地上手哈希,对(我这样的)新手很有帮助。

[JSOI2009] 电子字典:这题有更简洁的写法,可以不用取区间再合并,但推荐写一写,熟悉一些细节的处理。注意常数大小,最好用set而非map

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

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

相关文章

NFLS 图论题单笔记(完结)

John的农场是一张 N*N 的方格图,贝茜住在左上角(1,1),John住在右下角(N,N)。 现在贝茜要去拜访John,每次都只能往四周与之相邻的方格走,并且每走一步消耗时间 T。 同时贝茜每走三步就要停下来在当前方格吃草,在每个方格吃草的用时是固定的,为 H[i][j]。 John想知道贝…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现七

基于SSM整合maven开发的一款宠物收养领养管理系统附带源码指导运行视频,该项目前端模板是借鉴别人的,自己写的后台代码,该系统分为前台和后台,前台功能有:登录注册、领养中心、活动中心等。后台管理员功能有:用户管理、宠物管理、活动管理、领养管理、志愿者管理等。该项…

VS上查看某个类中各个成员变量所占用的内存空间

例子 class CTest {char a;int b;double c; };int main() {cout << sizeof(CTest) << endl;return 0; }输入命令 cl ConsoleApplication1.cpp /d1reportSingleClassLayoutCTest其中ConsoleApplication1.cpp 表示这个例子所在的cpp文件名 /d1reportSingleClassLayou…

CUBEMX配置

遥控器配置 cubemx配置在 Connectivity 标签页下将 USART3 打开,将其 Mode 设置为 Asynchronous 异步通讯方式将其波特率设置为 100000,数据帧设置为9位数据位(实测8位有错误),单校验位,1 位停止位接着开启USART3 的 DMA 功能,在 USART3 下找到 DMA Settings 标签呀,在 …

GPR模型的一些高斯原理介绍

一、几个概念区分:高斯的几个概念:高斯分布(Gaussian Distribution):高斯分布是统计学中最常见的概率分布之一,也称为正态分布。它具有钟形曲线的形状,由两个参数决定:均值(mean)和方差(variance)。 高斯分布在自然界和工程应用中经常出现,其形状由均值和方差决定…

20222411 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1 实践内容 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search一下就可以use) ②端口扫描:可以直接用nmap,也可以用Aux中的portscan/tcp等。 ③选做:也可以扫系统版本、漏洞等。 (2)Vsftpd源码包后门漏洞(21端口) 漏洞原理:在特定版本的vsftpd服务…

如何控制java虚拟线程的并发度?

jdk 21中的虚拟线程已经推出好一段时间了,确实很轻量,先来一段示例: 假如有一段提交订单的业务代码:1 public void submitOrder(Integer orderId) { 2 sleep(1000); 3 System.out.println("order:" + orderId + " is submitted");…

保险行业客户服务优化:客户运营知识库的实战应用

在保险行业,客户服务优化是提升客户满意度、增强企业竞争力的关键。客户运营知识库作为客户服务的重要支撑,其实战应用对于提升客户服务质量具有重要意义。本文将探讨保险行业客户服务优化的重要性、客户运营知识库的实战应用以及如何利用“HelpLook”工具实现客户服务优化。…

2024-11-18纯碱行情的解浪

图中蓝色线为调整浪ABC线 黄色线为5浪线 纯碱现在走的是ABC-C---->C-5---------5-4 总体来说是大级别的C浪,C浪的5浪,5浪的4浪回调,由于5浪的子2浪是都直的简单调整,5浪的一浪是启动三角形,趋势非常丝滑。这个5浪的子4浪会是大概率 的ABC调整,现在在走B浪还未完成,还…

2024-11-18 PVC分析

5182将是相当长时间的历史大底,这波不会破新低,以后N年也大概率不会破了。多头网格的好品种

ESP32蓝牙学习--蓝牙概念学习

前言 ESP32 是一款同时包含WIFI 蓝牙两者通信方式的芯片,之前学习过WIFI,这次学习一下其蓝牙功能,虽然之前有使用过其他的蓝牙芯片,但大多数都是使用应用层,很少去了解底层协议相关的知识,这一次从概念入手,细致了解一下蓝牙的相关概念,及ESP32相关的工程说明。 蓝牙的…

网络配置及进程-系统性能和计划任务

目录虚拟机联网 shell脚本实例 索引数组和关联数组,字符串处理,高级变量 进程管理 计划任务虚拟机联网 查看IP地址 #centos系列![root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.93.200 netmask 255.255.255.…