后缀自动机 //确认maxn大小,一般是原字符串长度最大值的2倍,然后是init(),最后是一个一个的字符插入, //转化成对应的数字,调用Insert函数,可支持在线。 struct SAM { int ch[maxn][26]; int pre[maxn],step[maxn]; int las ...
分类:
其他好文 时间:
2016-09-12 14:26:20
阅读次数:
162
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书《Building Microservices》。该书描述了如何按照Microservice架构模式设计及搭建一个具有良好扩展性并可持续开发的系统。除此之外,该书还将基于该模式的系统演化 ...
分类:
其他好文 时间:
2016-09-07 14:24:37
阅读次数:
141
题意:给出n个数字,数字很长,用字符串读入,长度总和为10^5。求这n个字符串的所有子串(不重复)的和取模2012 。 例如字符串101,和就是1+10+101=112。 题解: 就是求不同的子串连成一个数。sam的拓扑序真的很有用!按拓扑序可以保证能转移到当前x的节点都在之前被更新了。每个节点x维 ...
分类:
其他好文 时间:
2016-09-04 22:24:16
阅读次数:
270
spoj1811 给两个长度小于100000的字符串 A 和 B,求出他们的最长公共连续子串。 先将串 A 构造为 SAM ,然后用 B 按如下规则去跑自动机。用一个变量 lcs 记录当前的最长公共子串,初始化为0。设当前状态结点为 p,要匹配的字符为 c,若 go[c] 中有边,说明能够转移状态, ...
分类:
其他好文 时间:
2016-09-03 09:40:27
阅读次数:
168
题意:给定一棵树,每个节点有一个颜色,问树上有多少种子串(定义子串为某两个点上的路径),保证叶子节点数<=20。n<=10^5 题解: 叶子节点小于等于20,考虑将每个叶子节点作为根把树给提起来形成一棵trie,然后定义这棵树的子串为从上到下的一个串(深度从浅到深)。 这样做我们可以发现每个子串必定 ...
分类:
其他好文 时间:
2016-09-01 22:56:39
阅读次数:
222
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bottom, column by column). If two nodes are in the sam ...
分类:
其他好文 时间:
2016-08-24 09:54:10
阅读次数:
142
Learn Perl in about 2 hours 30 minutes By Sam Hughes Perl is a dynamic, dynamically-typed, high-level, scripting (interpreted) language most comparabl ...
分类:
其他好文 时间:
2016-08-23 06:46:06
阅读次数:
206
简介
后缀三姐妹:后缀数组,后缀自动机,后缀树。
后缀自动机:Suffix Automation,也叫SAM。
创立算法的思路来源:能不能构出一个自动机(本质就是一个有向图),能识别一个串的所有后缀。
识别所有后缀基础想法
把所有的后缀都放进一个trie里面,比如串aabbabd。
这样的状态太多了,怎么把状态数缩小。
减小状态数的方法
定义一个子串的right集合为这...
分类:
其他好文 时间:
2016-08-19 08:37:43
阅读次数:
554
int extend(int x,int p) {
int np=++tot;sam[np].len=sam[p].len+1;
while (p&&!sam[p].son[x]) sam[p].son[x]=np,p=sam[p].pr;
if (!p) sam[np].pr=1;else {
int q=sam[p].son[x];
if...
分类:
其他好文 时间:
2016-08-17 23:09:48
阅读次数:
146
【题目大意】 求一个循环数列的最小表示法。 【思路】 最小表示法模板题。之前用SAM做的,MLE了hhhhh戳☆ ...
分类:
其他好文 时间:
2016-08-14 19:19:49
阅读次数:
169