最近几天一直在做有关后缀自动机的题目 感觉似乎对后缀自动机越来越了解了呢!喵~ 这题还是让我受益颇多的,首先搞一个后缀自动机是妥妥的了 可是搞完之后呢? 我们来观察 step 这个变量,每个节点的 step 是从根节点到此节点所经过的最长步数 那么也就是以该点为结尾的最长的后缀长度 如何统计不被 Bi 串包含的子串呢? 其实很简单,维护每个节点所能匹配的最长的字符串长度 然后 节点->step-max(该节点所能匹配的最长的字符串长度, 节点->fail->step) 就是答案了 因为…
题意:给出串A和串集合B={B1,B2,...,Bn},求串A的所有不同子串中不是B中任一串的子串的数目. 思路:把A和B中所有字符串依次拼接在一起,然后构造后缀自动机,计算每个状态的R集合元素的最大值r,然后统计那些r≤length(A)的状态.hdu不卡时间卡空间,这是最郁闷的...导致下面的程序只在本地随机数据没发现错误,提交就MLE. #include <bits/stdc++.h> using namespace std; #define X first #define Y seco…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4416 [题目大意] 给出一个字符串,然后,给出一个字符串集合,问在该字符串中出现,且不在字符串集合中出现的子串总数. [题解] 将集合中所有的子串在自动机上跑,保存匹配到的位置的最长匹配, 用于在parent树上计算每个位置的最长匹配,对于一个位置, 如果不存在匹配,那么他对答案的贡献就是其value值, 如果存在匹配且匹配长度小于其长度那么取其差作为答案的贡献.最后输出即可. [代码] #in…
题解转自:http://blog.csdn.net/dyx404514/article/details/8807440 2012杭州网络赛的一道题,后缀数组后缀自己主动机都行吧. 题目大意:给一个字符串S和一系列字符串T1~Tn,问在S中有多少个不同子串满足它不是T1~Tn中随意一个字符串的子串. 思路:我们先构造S的后缀自己主动机,然后将每个Ti在S的SAM上做匹配,类似于LCS,在S中的每个状态记录一个变量deep,表示T1~Tn,在该状态能匹配的最大长度是多少,将每个Ti匹配完之后,我们将…
Description Given two strings, you have to tell the length of the Longest Common Substring of them. For example:str1 = bananastr2 = cianaic So the Longest Common Substring is "ana", and the length is 3. Input The input contains several test case…
MZL's Circle Zhou Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description   MZL's Circle Zhou is good at solving some counting problems. One day, he comes up with a counting problem:You are given two…
The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Problem Description Here you have a set of strings. A dominator is a string of the set dominating all strings else. The string S is dominated…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3238 [题目大意] 给出一个字符串求其出现恰好k次的子串数量 [题解] 对串建立AC自动机,所有right值为k的节点的value值的和就是答案 [代码] #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int N=200010; cha…
HDU 4416 Good Article Good sentence Problem : 给一个串S,和一些串T,询问S中有多少个子串没有在T中出现. Solution :首先对所有的T串建立后缀自动机,统计出本质不同的子串个数ans1,再将S串插入后缀自动机,统计出本质不同的子串个数ans2,则答案即为ans2-ans1. 将多个串插入后缀自动机,只需要每次将last赋值为root即可. #include <iostream> #include <string> #includ…
http://www.lydsy.com/JudgeOnline/problem.php?id=4516 http://blog.csdn.net/doyouseeman/article/details/52245413 后缀自动机的性质应用,求子串种类数. 又是自动机写错了查了半天,字符集太大了导致什么都没对拍出来...最后肉眼看出来了,我是个zz. /************************************************************** Problem:…