后缀自动机
A_root_A
这个作者很懒,什么都没留下…
展开
-
bzoj 2806 后缀自动机
先把所有作文库连起来建立一个后缀自动机。 对于每一个询问,把字符串拿到自动机上去跑匹配,计算出每一个位置能匹配的最大长度val[i];然后二分一个L值,用dp来检验,设dp[i]为前i个字符的最大匹配数 就有dp[i] = max(dp[j]+i-j | i-val[i] <= j <= i-L)。 维护一个队列存放i-L~i的元素 然后检验队首元素是否满足i-val[i] <...原创 2018-09-20 19:03:49 · 178 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 H题 String and Times 后缀自动机
裸题 #include <cstdio> #include <cstring> #include <map> #include <algorithm> using namespace std; typedef long long ll; #define N 200010 int t,k,len=0,n=0,last,root,son[N<&...原创 2018-09-18 16:22:34 · 223 阅读 · 0 评论 -
bzoj 4516 后缀自动机
在字符串后面每加一个字符,增加的以它为末尾的字符串个数为 mx[p]−mx[fa[p]] #include <cstdio> #include <map> #include <algorithm> using namespace std; #define N 200010 #define ll long long int root,last,n,cnt...原创 2018-09-18 14:07:16 · 164 阅读 · 0 评论 -
bzoj 4566 后缀自动机
求两个字符串中各取出一个串使他们相同的方案数 第一个串建SAM,第二个串在上面跑匹配。 这里需要从前面遍历到后面 用size表示它的个数,求每个点的贡献,这个点已经匹配上了,那么它的父节点也是可以的,所有结果是f[fa[p]]+size[p]∗(mx[p]−mx[fa[p]]) #include <cstdio> #include <cstring> #de...原创 2018-09-18 15:36:12 · 392 阅读 · 0 评论 -
洛谷p3804 后缀自动机
#include <cstdio> #include <cstring> #include <map> #include <algorithm> using namespace std; typedef long long ll; #define N 1000010 int t,k,len=0,n=0,last,root,son[N<<1...原创 2018-09-18 13:25:01 · 177 阅读 · 0 评论 -
bzoj 3926 h后缀自动机
详细题解:http://wjmzbmr.com/archives/zjoi-2015-day-1%E9%A2%98%E8%A7%A3/(看不懂。。。) #include <cstdio> #include <map> #include <algorithm> #include<cstring> using namespace std; #def...原创 2018-09-19 20:55:17 · 164 阅读 · 0 评论 -
spoj 8222 后缀自动机
#include <cstdio> #include <cstring> #include <map> #include <algorithm> using namespace std; #define N 250010 int t,k,len=0,n=0,last,root,son[N<<1][26],fa[N<<1],m...原创 2018-09-18 13:26:44 · 150 阅读 · 0 评论 -
专题训练2 后缀自动机题目清单
模板 void ins(int ch){ int p=last,np=++cnt;mx[np]=mx[p]+1;last=np;size[np]=1; while(p && !son[p][ch]) son[p][ch]=np,p=fa[p]; if(!p) fa[np]=root; else{ int q=son[p][ch];...原创 2018-09-16 20:52:44 · 793 阅读 · 0 评论