后缀自动机转后缀树模板

利用后缀数组构造后缀树 由于蒟蒻azui前段时间忙着准备省选,并在省选中成功闷声滚大粗,博客停更了好久。。 阅读详情

终于找到教程了,现在来写一发

题目:Jzoj4072(bzoj3998)弦论 第一问

其实非常好写,连空间都不需要多开一倍,只需要sa数组rank数组和height数组就好了,dfs一次可以求出


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#define N 1000010
using namespace std;
char str[N]; long long k,c[N];
int s[N][26],f[N],sz[N],l[N],mx[N];
int n,m,cnt=1,lst=1,tot=0,sa[N],r[N],h[N];
inline int extend(char c,int pos){
	int p=lst,np=lst=++cnt,q,nq; c-='a';
	mx[np]=mx[p]+1; sz[np]=1; l[np]=pos;
	for(;p&&!s[p][c];p=f[p]) s[p][c]=np;
	if(!p) return f[np]=1;
	q=s[p][c];
	if(mx[q]==mx[p]+1) f[np]=q;
	else{
		nq=++cnt;
		mx[nq]=mx[p]+1; l[nq]=l[q];
		f[nq]=f[q]; f[q]=f[np]=nq;
		memcpy(s[nq],s[q],26<<2);
		for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
	}
}
void dfs(int x){
	if(sz[x]) sa[++tot]=l[x],r[l[x]]=tot;
	for(int i=0;i<26;++i) if(s[x][i]) dfs(s[x][i]);
}
int main(){
	scanf("%s%d%lld",str+1,&m,&k);
	for(int i=n=strlen(str+1);i;--i) extend(str[i],i);
	memset(s,0,sizeof s);
	for(int i=2;i<=cnt;++i) s[f[i]][str[l[i]+mx[f[i]]]-'a']=i;
	dfs(1);
	for(int i=1,j,k=0;i<=n;++i) 
		if(r[i]>1){
			for(k?--k:0,j=sa[r[i]-1];str[i+k]==str[j+k];++k);
			h[r[i]]=k;
		}
	if(m) for(int i=1;i<=n;++i) c[i]=c[i-1]+n-sa[i]+1;
	else for(int i=1;i<=n;++i) c[i]=c[i-1]+n-sa[i]+1-h[i];
	if(k>c[n]) puts("-1"); else {
		int j=lower_bound(c+1,c+1+n,k)-c;
		while(c[j]>k) --j; str[k-c[j]+sa[j+1]+h[j+1]]=0;
		printf("%s",str+sa[j+1]);
	}
}

后缀自动机SAM 后缀自动机SAM总结。 阅读详情

相关推荐

后缀树入门.ppt--后缀树入门.ppt

后缀树入门.ppt; 后缀树入门.ppt; 后缀树入门.ppt;

知识点 - 后缀树模板

知识点 - 后缀树模板 解决问题类型: 读入一个串,建一颗后缀树 论文: Algorithms on Strings, Trees, and Sequences 定义与代码: O(nlog⁡(k))O(n\log(k))O(nlog(k))建树k是字母表大小。 string s; int n; struct node { int l, r, par, link; map<char,i...

qq_41848675的博客 515

后缀树入门acm竞赛

后缀树入门acm竞赛!!!!!!!!!!!!!!!!!!!!!!!!!

算法学习:后缀自动机转后缀树转后缀数组

算法学习:后缀自动机转后缀树转后缀数组 引入 其实这是一篇水文 想要学后缀自动机的话去查2012年noi冬令营陈立杰讲稿 顺便说一句,讲稿上有一些错误,多翻几篇博客加深理解。 今天这里主要要讲的是后缀自动机如何转后缀树和后缀数组 后缀树 这里首先需要提一下后缀树的概念 后缀树其实相当于把所有的后缀插入一颗Trie树 然而时空复杂度都是O(N^2)的 所以我们可以把这可T

maxtir的博客 3204

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输至原子云

本文详细介绍了如何使用立创·庐山派-K230-CanMV开发板,通过ATK-ESP8266 WIFI模块实现图像识别数据的无线传输至原子云平台。内容包括硬件连接、软件环境搭建、AT指令控制、原子云连接及数据上传的全过程,并提供了实用的调试技巧和常见问题解决方案,为物联网应用开发提供了完整实践指南。

potato的博客 740

【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解

IIC通信以两根连线SDA、SCL实现了完善的全双工同步数据传送, 可以方便地构成多机系统和外围器件扩展系统。

Jie_MSD的博客 2万+

后缀自动机(SAM)讲解 + Luogu p3804【模板】后缀自动机 (SAM)

后缀自动机 SAM

Jacob0824的博客 3049

iTunes备份文件路径修改方法

因为以前的很多帖子iTunes都不是从微软下载的,而现在的iTunes一般都是微软商店里面的,它的路径为:“C:\Users\ 你的用户名 \Apple\MobileSync” (注:用户名,根据个人电脑名称更改)打开iTunes备份路径:“C:\Users\txh\AppData\Roaming\Apple Computer\MobileSync”,其中文件夹MobileSync就是用来存放备份文件的。创建你想备份纯在的目录创建备份文件目录(我的是G:/APPLE/Backup)2.粘贴的剪切文件目录。

尘玥的故事 1万+

【后缀自动机】自动机<->后缀树<->后缀数组

一直都说自动机建后缀树,一直没真正构出后缀树过... 其实建后缀树很简单,父亲边已经有了,关键是边代表的子串怎么求。从叶子一层一层向上,对于节点i,我们已经知道了它在原串的位置和逆序后缀长度,他的父亲的逆序后缀长度也知道,父亲又是i的逆序后缀的前缀,这就可以直接在原串定位了。 另外,通过父亲边还可以求出节点i可接受的最短子串,设i的最长子串长度为maxlen[i],最短子串长度为minlen[

huyuncong的专栏 2350

从Delphi 7到Delphi 10.4.1的代码迁移:关键挑战与实用解决方案

本文详细探讨了从Delphi 7升级到Delphi 10.4.1进行代码迁移的关键挑战与实用解决方案。核心内容包括应对Unicode字符串处理、64位数据类型变化、VCL/FMX界面框架选择、第三方组件迁移以及数据库层现代化改造(如从BDE迁移至FireDAC)。文章为开发者提供了系统的迁移前准备、核心问题攻克策略及测试落地指南,旨在帮助团队高效、平稳地完成系统现代化升级。

weixin_29250403的博客 531

人形机器人硬件开发:骨架系统设计全攻略

本文以人形机器人骨架系统为核心研究对象,系统解析其从理论建模到工程实现的全流程设计方法。通过融合刚体力学、材料科学与机器人控制理论,构建"概念基础-理论框架-架构设计-实现机制-实际应用-高级考量-综合拓展"的七层分析体系。重点覆盖运动学/动力学建模、轻量化结构设计、关节模块集成、多物理场耦合优化等关键技术,结合波士顿动力Atlas、本田ASIMO等经典案例,提供从原型设计到量产验证的工程实践指南。

AI天才研究院 1870

[模板] 后缀自动机&&后缀树

后缀自动机 后缀自动机是一种确定性有限状态自动机, 它可以接收字符串\(s\)的所有后缀. 构造, 性质 翻译自毛子俄罗斯神仙的博客, 讲的很好 后缀自动机详解 - DZYO的博客 - 优快云博客 下面是一些note: 定义 对于字符串\(s\)的子串\(t\), \(endpos(t)\) (或者 \(right(t)\) ) 表示t在s中出现位置的右端点的集合. \(endpos\)互不...

weixin_34346099的博客 207

Linux 系统管理员必备:Chrome 企业版离线部署全攻略(含 RPM/DEB 双版本)

本文详细介绍了Linux系统管理员如何离线部署Chrome企业版,涵盖RPM和DEB双版本。从获取官方离线安装包到静默安装、权限配置及企业级策略管理,提供全流程解决方案,特别适合Ubuntu等DEB系系统管理员参考。

f9g0h的博客 481

字符串-后缀树和后缀数组详解

后缀树和后缀数组可以解决大部分字符串问题。光速从入门到放弃,看这一篇就够了。 例题: HDU-1403最长公共子串 洛谷P2408 不同子串个数 HDU-5769Substring

有一分热,发一分光。 4987

【即插即用模块】Transformer篇 | CVPR 2025 | SADA:多尺度+可变形采样,完美替换自注意力实现涨点!

文章摘要 本文提出了一种尺度自适应可变形注意力模块(SADA),用于处理图像修复中的结构化伪影问题。SADA通过多尺度多头机制捕获远程依赖关系,并引入可变形采样偏移来有效处理非均匀空间分布的模式。该模块适用于底层视觉任务,可替代ViT自注意力,实验证明能显著提升性能。代码已开源,支持即插即用集成。 核心特点: 多尺度头适应不同大小的重复模式 可变形偏移优化非均匀分布采样 轻量级设计,易于集成到现有架构 适用场景:图像去噪、超分辨率等底层视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1431

基于Python的网贷平台数据爬虫实战:Scrapy+Selenium+反反爬策略

python复制下载# items.py本文详细介绍了如何使用Python构建一个完整的网贷平台数据爬虫系统,涵盖了从基础爬取到高级反反爬策略的全套解决方案。我们使用了Scrapy框架作为基础,结合Selenium处理动态内容,实现了多种反反爬策略,并探讨了分布式爬虫的实现方式。机器学习识别验证码基于深度学习的网页结构变化检测自动化行为模拟的更精细控制基于Kubernetes的弹性爬虫集群。

2201_76125261的博客 1560

模板:后缀自动机(SAM)

一寸难,一寸强

BUG_Creater_jie的博客 990

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

后缀自动机 模板 【Poi2000】 公共串 bzoj 2946

后缀自动机按照哲学中是什么怎么做为什么的思路,我们来理解一下后缀自动机。是什么后缀自动机就是能识别所有的后缀(当然就能顺便识别所有后缀的前缀,就是子串了)的自动机。 它能做什么呢? 它能做字符串问题啊…… 比如什么求公共前缀啊,求有多少个本质不同的公共子串,当然它很多时候都和LCT搭配使用,能做的事情就更多。 什么用后缀数组啊,KMP啊啥的能做的题它好像都能做,用后缀树能做的题它也能做!(比

Todobe 935

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[后缀树 & 虚树(模板)] BZOJ3879. SvT

题目:这里写链接内容 题解:两个后缀的LCP是后缀树上对应节点的LCA 多组询问就用虚树 后缀树:将串反过来,跑后缀自动机,pnt树是原串后缀树。 虚树:一份很完整的讲解 代码挺模板的 #include&lt;bits/stdc++.h&gt; using namespace std; #define maxn 1000020 #define rep(i,l,r) for(regist...

执子之手,与子偕老 444

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

后缀自动机总结

学了一发后缀自动机……然而特么做题全是看的题解(毕竟pb太弱)…… 这里就不写后缀自动机的构造和原理了吧……网上多的是……(事实上是pb太弱不懂……) 1.codevs 3160最长公共子串 题目都一句话了……我就懒得说了…… 这是后缀自动机必做的裸题吧…… 先把第一个字符串建一个后缀自动机,然后拿第二个串在后缀自动机上跑,优先跑能走到的字符,如果走不到就走pre节点,再看能不能走这个字符

PbTfcLx 978

后缀自动机解决各类问题

后缀自动机是能存储和识别一个字符串S的所有后缀的自动机,是一个有向无环图。endpos 实际上是一个集合。具体而言,endpos 是 的字串 在 中出现位置的末尾的集合。 因此,根据定义,显然有性质:(下面简写 endpos 为edp, 表示字串 的 edp 集合,所有 edp 集合相同的字串所构成的集合成为 edp 等价类)我们发现一个 edp 等价类里的所有字串具有类似的性质,因此我们考虑将所有 edp 等价类的字串变成一个点来看待。后缀自动机的巧妙处:用路径表示子串由于一个 edp 等价类中所

2301_80812282的博客 559

后缀自动机实际应用

上一篇我们具体介绍了后缀自动机的构造方式,但并没有谈它的应用,那么我们在这一篇里详细谈一谈后缀自动机的应用 首先,后缀自动机的性质:从根节点开始可以识别一个字符串的所有子串 接下来,我们需要给出一个定义: 将后缀自动机上的pre指针反指,会得到一棵树形结构,我们把这棵树叫做parent树! parent树是原串反串的后缀树! 记住这个定义,因为后缀自动机中大部分题都与这棵树有千丝万缕的联...

lleozhang的博客 993
上一篇: Jzoj3172 贴瓷砖
下一篇: Jzoj4209 已经没有什么好害怕的了
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值