随笔分类 -  字符串算法-后缀自动机

摘要:"题目链接" 建出$sam$,求出parent tree上每个点的$endpos$集合大小。 如果等于$k$,说明到达这个点的都可以。给$(len[fa(i)],len[i]]$的$cnt$都加$1$,差分即可。 cpp include include include using namespace 阅读全文
posted @ 2019-06-16 12:01 Qihoo360 阅读(334) 评论(0) 推荐(0)
摘要:"题目链接" 广义sam+不同子串个数。。 找到所有入度为$0$的点开始$dfs$,建出广义sam。 然后就是 "不同子串个数" 了 cpp include include include using namespace std; const int MAXN = 1000010; struct S 阅读全文
posted @ 2019-06-16 10:58 Qihoo360 阅读(139) 评论(0) 推荐(0)
摘要:"题目链接" 广义sam。。 cpp include include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN 阅读全文
posted @ 2019-06-16 10:12 Qihoo360 阅读(185) 评论(0) 推荐(0)
摘要:"题目链接" 建出$SAM$后,不同子串个数就是$\sum len(i) len(fa(i))$ 因为$SAM$在线的,所以每加入一个字符就能直接加上其贡献,于是这道题就没了。 因为$x$有点大,所以把$ch$改成$map$就行。 cpp include include include includ 阅读全文
posted @ 2019-06-09 09:35 Qihoo360 阅读(178) 评论(0) 推荐(0)
摘要:"题目链接" 对第一个串建出$SAM$,然后用第二个串去匹配。 如果能往下走就往下走,不能的话就跳parent tree的父亲,直到能走为止。如果跳到$0$了还是不能走,重新匹配。 cpp include include include using namespace std; const int 阅读全文
posted @ 2019-06-09 08:58 Qihoo360 阅读(127) 评论(0) 推荐(0)
摘要:"题目链接" 裸体就是身体。 建出$SAM$,$DAG$上跑$DP$,$f[u]=1+\sum_{(u,v)\in DAG}f[v]$ 答案为$f[1] 1$(因为根节点没有字符) cpp include include include using namespace std; const int 阅读全文
posted @ 2019-06-06 19:18 Qihoo360 阅读(368) 评论(0) 推荐(0)
摘要:"题目链接" $$ans=\sum_{1 include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN 阅读全文
posted @ 2019-06-06 18:24 Qihoo360 阅读(175) 评论(0) 推荐(0)
摘要:"题目链接" 建出后缀自动机。 T=0,每个子串算一次,否则每个子串算该子串的$endpos$集合大小次。 用$f[i]$表示结点$i$表示的$endpos$集合大小,则$f[i]$为其parent tree的子树的$f$之和(T=0时,f[i]均为1)。 用$g[i]$表示从结点$i$出发的子串个 阅读全文
posted @ 2019-06-06 17:03 Qihoo360 阅读(150) 评论(0) 推荐(0)
摘要:"题目链接" cpp include include include using namespace std; const int MAXN = 1000010; struct SAM{ int ch[26]; int len, fa; }sam[MAXN 阅读全文
posted @ 2019-06-06 16:56 Qihoo360 阅读(150) 评论(0) 推荐(0)

You're powerful!