字符串
andyc_03
这个作者很懒,什么都没留下…
展开
-
回文自动机
【算法介绍】 这个一个长得很像AC自动机的自动机回文自动机(PAM) 对于每个点仍然是由转移边,表示每个点的位置向左右各延伸一个字符c,形成的回文串 考虑fail边记录什么,我们主要利用fail去进行加速查找,所以有用的信息是每个位置的最长回文后缀 fail记录每个串的最长回文后缀的左端点,len记录当前位置的回文串长度 设立两个起始节点,0和1,0表示长度为偶数的串的开始,1表示长度为奇数的开始 所以注意赋初值:len[1]=-1 fail[0]=1 tot=1 【例题1】 P5496 【原创 2021-05-03 22:54:35 · 118 阅读 · 0 评论 -
manacher
【算法介绍】 线性求出每个点作为中心节点的,最长回文子串的半径 【例题】 1.hdu5340 【题意】 判断是否能成为3个非空回文子串 【分析】 manacher跑出p数组,然后考虑每个枚举从左和从右的两个回文串,并判断中间的串是否是回文串即可 【代码】 #include<bits/stdc++.h> using namespace std; const int maxn=4e4+5; char s[maxn],a[maxn]; int t,n,p[maxn]; void m原创 2021-05-03 22:46:57 · 102 阅读 · 0 评论 -
【Trie+dp】UVA1401 Remember the Word
这道题目由于S较为长,所以暴力枚举一定是超时的 所以考虑f[i]表示从i-L(后缀)的方案数 那么就可以推出 f[i]=sum{f[i+len(suf)],suf是i-L的一个前缀} 然后就可以在字典树上求这个前缀了 代码 #include<bits/stdc++.h> using namespace std; const int mod=20071027; const int maxn=3e5+5; char str[maxn],s[maxn]; int n,f[max..原创 2020-08-02 14:49:53 · 96 阅读 · 0 评论