字符串
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 · 117 阅读 · 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 · 83 阅读 · 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 · 93 阅读 · 0 评论