后缀自动机
magic_sheep
这个作者很懒,什么都没留下…
展开
-
COGS 2123. [HZOI 2015] Glass Beads
最小表示法,这里用后缀自动机实现。 刚刚学了后缀自动机,懵逼中。#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn=3001000; char s[maxn*2]; int n; struct sam原创 2017-03-06 21:00:33 · 375 阅读 · 2 评论 -
BZOJ 3277&&3473 广义后缀自动机
两道题一模一样,不说什么了。对于所有串建立广义后缀自动机,用set维护每个状态出现在哪些串里,构建出parent树结构,进行一遍dfs 逆序启发式合并set即可。统计答案只要在自动机上跑一遍如果k#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<set> #include<vector转载 2017-03-21 11:53:20 · 473 阅读 · 0 评论 -
BZOJ 2780 后缀自动机
由于是英文题,简要解释一下题目。开始给出n个子串,和m个询问,对于每个询问读入一个子串,询问n个子串中,有多少个子串包含所询问的子串。实在看不懂的可以从样例中意会一下。#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <cstring> #include <set> using原创 2017-03-28 15:29:50 · 492 阅读 · 0 评论 -
BZOJ 3172 [Tjoi2013]单词 后缀自动机
其实这显然是一道AC自动机裸题,这里补上后缀自动机做法。#include <bits/stdc++.h> using namespace std; #define maxn 1100000 int n,len; string s[500]; struct SAM { int a[maxn<<1][28],fa[maxn<<1],mx[maxn<<1],num[maxn<<1]; in原创 2017-03-28 15:18:45 · 1332 阅读 · 0 评论 -
BZOJ 2555: SubString 动态树+后缀自动机
首先,这是一道代码题,利用动态树维护后缀自动机的parent树,如果不是强制在线,可能会好写一点。对于每个询问,找到被询问节点所在的right集合,集合大小即为答案。注意,这里的LCT为有向的,写起来有些不一样。#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std;原创 2017-03-16 19:46:37 · 290 阅读 · 0 评论 -
BZOJ 2946 [Poi2000]公共串
第一个串建立后缀自动机,其余串在后缀自动机上进行匹配,每个状态记录所有串匹配最小值,最后对所有状态求最大值即可。对mx[]排序可以得到后缀树和自动机的拓扑序。#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn=4010; int n,原创 2017-03-16 21:06:31 · 555 阅读 · 0 评论