字符串hash(二)

从上一届已经讲了字符串hash的方法,hash后怎么用也很重要

文章目录

    • 一.查询子串的hash值
    • 查询子串减去期中一个字符后的hash值
    • 查询两个子串拼接的hash值

**hash的模板(自然溢出)**

char s[10010];
ull hashs(char s[])
{int len=strlen(s);ull base=131;ull head[]=0;for (int i=1;i<=len;i++)head[i]=head[i-1]*base+(ull)s[i];return ans&0x7fffffff;//舍弃符号位
}

一.查询子串的hash值

base[x]表示base的x此方
head[1]=s1
head[2]=s1base[1]+s2
head[3]=s1
base[2]+s2*base[1]+s3

我们可以得到:
字符串S中子串[l,r]的hash值为:
hash=hash[r]-hash[l-1]*base[r-l+1]

unsigned long long get_hash(int l, int r)
{return hash[r] - hash[l-1] * base[r-l+1];
}

查询子串减去期中一个字符后的hash值

查询字符串S中范围[l,r],但是去掉区间中坐标为x的字符串,问剩下的hash
其实就是将 [ l , r ] 分解成 [ l , x - 1 ] [x+1,r ],求这两块的hash
扩展一下,去掉哪里你就把区域在这里给拆开就行,分着求最后合在一起

但是注意,因为中间被你挖去一块,也就是 [ l , x - 1 ] 与 [ x+1,r ]并不是相连的,他们两个的hash值不能直接相加,很简单因为他们都是因为base的倍数乘积所以相连,所以讲前者(也就是[ l , x - 1 ] )强行左移r-x位(以base的进制),左移就是乘base的r-x次方
位移次数是右区间左端点与右端点之间的数量r-(x+1)+1

unsigned long long get_hash_delete(int l, int r, int x)
{return get_hash(l, x-1) * base[r-x] + get_hash(x+1, r);
}

多用以求最长回文子串或者回文子串数量,当然manacher、kmp能完成的更好

查询两个子串拼接的hash值

其实拼接和去除原理是一样的
拼接不就是去除倒嘛
所以代码原理和上面也差不多,两个区域[l,r]和[x,y]的哈希值,前者通过位移使得两个区域可以直接相加,位移的次数就是y-x+1(其实和上面一样的,你细品)

unsigned long long get_s1_s2(int l, int r, int x, int y)
{return get_hash(l, r) * p[y-x+1] + get_hash(x, y);
}

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

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

相关文章

记一次.net core 集成vue 实践

简介以前我们总是喜欢用服务端渲染前端&#xff08;虽然也有htmlajax这种做法&#xff09;&#xff0c;后来node诞生了&#xff0c;前端工具链&#xff08;不如说生态&#xff09;诞生了&#xff0c;大家都开始了前端的重构之路&#xff0c;本文将以一简单案例介绍下我们是如何…

【矩阵乘法】幼儿园数学题II(ssl 2514)

幼儿园数学题II ssl 2514 题目大意 给出式子 f(1)1,f(2)1f(1)1,f(2)1f(1)1,f(2)1 f(n)−f(3)−f(4)−f(5)−...−f(n−3)−f(n−2)(n4)(n−1)/2f(n)-f(3)-f(4)-f(5)-...-f(n-3)-f(n-2)(n4)(n-1)/2f(n)−f(3)−f(4)−f(5)−...−f(n−3)−f(n−2)(n4)(n−1)/2 让你求前n项的和…

P3705-[SDOI2017]新生舞会【0/1分数规划,费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P3705 题目大意 nnn对人&#xff0c;给出两个n∗nn*nn∗n的矩形a,ba,ba,b。求一个nnn配对满足∑i1naxi,yi∑i1nbxi,yi\frac{\sum_{i1}^na_{x_i,y_i}}{\sum_{i1}^nb_{x_i,y_i}}∑i1n​bxi​,yi​​∑i1n​axi​,yi​​​最大。…

最短路径

SPFA (Bellman-Ford 的队列优化版本)&#xff1a; 1、求单源最短路径&#xff0c;即每个点到源点的最短距离 2、可以处理负权边的情况 3、可以判断是否出现负权回路 #include<iostream> #include<vector> #include<cstring> #include<queue> using…

牛客网 【每日一题】5月11日题目精讲 Moovie Mooving

题目链接 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from Farmer John for L (1 …

AspNetCore中使用Ocelot之 IdentityServer4

前言&#xff1a;Ocelot网关是基于AspNetCore开发的可扩展的高性能的企业级Api网关&#xff0c;目前已经基于2.0 升级版本升级&#xff0c;在使用AspNetCore 开发的时候可以使用2.0版本了&#xff0c;开源项目Ocelot 张大队长是主力的参与人员&#xff0c;以前提起张大队前面都…

P3177-[HAOI2015]树上染色【树形dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3177 题目大意 nnn个点的一棵树&#xff0c;将kkk个点染成黑色&#xff0c;其他是白色&#xff0c;使得黑点之间和白点之间两两距离和最大。 解题思路 也是统计每条边的贡献&#xff0c;设fx,if_{x,i}fx,i​表示节点xxx的子…

Nginx主配置文件详解【笔记】

1 Nginx配置文件目录结构 最近使用Nginx做负载均衡&#xff0c;顺便整理Nginx配置文件笔记如下所述&#xff0c;本文主要梳理主配置文件各属性的作用。使用yum安装好Nginx后&#xff0c;可以在默认路径&#xff08;/etc/nginx&#xff09;看到如下配置文件。 /etc/nginx/ ├─…

【矩阵乘法】Quad Tiling(poj 3420)

Quad Tiling poj 3420 题目大意 在一个4n的棋盘上&#xff0c;用12的多米诺骨牌把他填满&#xff0c;问有多少种方法 输入样例 1 10000 3 10000 5 10000 0 0 输出样例 1 11 95数据范围 1⩽N⩽1091 \leqslant N \leqslant 10^91⩽N⩽109 0<M⩽1050 < M \leqslant 10…

牛客网 【每日一题】5月12日题目精讲 模拟战役

链接&#xff1a; 文章目录题目描述题解&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 齐齐和司机在玩单机游戏《红色警戒IV》&#xff0c;现在他们的游戏地图被划…

微服务介绍及Asp.net Core实战项目系列之微服务介绍

0、目录整体架构目录&#xff1a;ASP.NET Core分布式项目实战-目录一、微服务选型在做微服务架构的技术选型的时候&#xff0c;以“无侵入”和“社区活跃”为主要的考量点&#xff0c;将来升级为原子服务架构、量子服务架构的时候、甚至恢复成单体架构的时候&#xff0c;代价最…

P3349-[ZJOI2016]小星星【树形dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P3349 题目大意 nnn个点的一棵树&#xff0c;再给出一张图&#xff0c;树上每个点对应图上每个点后要求树上的边图上都有&#xff0c;求有多少种对应方式。 解题思路 由于题目要求每个点只出现一次就加大了难度&#xff0c;可…

【矩阵乘法】生成树计数(luogu 2109/NOI 2007)

生成树计数 luogu 2109 题目大意 有n个排成一列的点&#xff0c;把距离不超过k的点之间连边&#xff0c;问这个图的生成树个数 输入样例 3 5输出样例 75样例说明 样例对应的图如下&#xff1a; 数据范围 解题思路 因为n十分大&#xff0c;不能直接2^m暴力枚举&#x…

[XSY] PQ树(区间DP)

PQ树 对于非叶子节点&#xff0c;它只能调换它的儿子的顺序&#xff0c;却不能调换整颗子树的顺序合法的PQ树都能表示出1,2,3,…,n 这个排列由以上两点可以得出&#xff1a;PQ树的每棵子树对应的一定都是一段连续的数字区间考虑区间DP&#xff0c;设f(l,r)f(l,r)f(l,r)表示数字…

牛客网 【每日一题】5月14日题目 maze

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 小明来到一个由n x m个格子组成的迷宫&#xff0c;有些格子是陷阱&#xff0c;用’#‘表示&#xff0c;小明…

你需要知道的这几种 asp.net core 修改默认端口的方式

一般情况下&#xff0c;aspnetcore发布后的默认端口是5000&#xff0c;这个大家都知道&#xff0c;而且默认骨架代码中没有看到任何让你输入的ip地址和端口号&#xff0c;但作为程序员的我们&#xff0c;不希望被框架所管制&#xff0c;那如何实现默认端口的修改呢&#xff1f;…

CF1139D-Steps to One【期望dp,莫比乌斯反演】

正题 题目链接:https://www.luogu.com.cn/problem/CF1139D 题目大意 不停的在表格中填下1∼m1\sim m1∼m中随机一个数&#xff0c;直到所有数的gcd1gcd1gcd1为止&#xff0c;求期望数的个数。 解题思路 设fnf_nfn​表示现在gcdgcdgcd为nnn时的期望个数。那么有转移方程fn∑i…

【DP】错排问题(ybtoj DP-1-1)

错排问题 ybtoj DP-1-1 题目大意 求n个数的错排种数 输入样例 2输出样例 1数据范围 1⩽n⩽201\leqslant n \leqslant 201⩽n⩽20 解题思路 设fif_ifi​为i个数的错排种数 考虑第i个数能放在前面i-1个位置的其中一个&#xff08;i-1种选法&#xff0c;要乘i-1&#xff0…

牛客网【每日一题】5月15日题目 储物点的距离

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 一个数轴&#xff0c;每一个储物点会有一些东西&#x…

[XSY] 最长公共子串对(后缀自动机)

最长公共子串对 先放一段考场暴力代码&#xff1a; #include<iostream> #include<cstdio> #include<cstring> using namespace std; char a[2005],b[2005]; int na,nb,f[2005][2005],c[2005][2005],ans; //f[i][j]表示 s[1...i]与 t[1...j]以s[i]、t[j]结尾…