摘要: 题意:给10个字符串,求他们的最长公共子串。题解:只要明确后缀自动机中的每个节点都是其实都对应着逆序的后缀树的一个集合。而nlcs(当前最长匹配长度)和lcs都是对于这个集合而言的,所有,每个点都要更新他的*f指针(逆序后缀树的父亲)所指的节点。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 500050 8 9 using 阅读全文
posted @ 2013-02-20 23:33 proverbs 阅读(898) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个字符串的环,求从那个位置起字符串的字典序最小。题解:最小表示法。论文链接View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <algorithm> 6 7 #define N 20200 8 //求最小循环同构串起点 9 using namespace std;10 11 char str[N];12 int len;13 14 inline int go()15 阅读全文
posted @ 2013-02-20 20:30 proverbs 阅读(1062) 评论(0) 推荐(0) 编辑
摘要: 题意:给两个字符串A、B求他们的最长公共字串。题解:后缀自动机啊。你怎么这么恶心这么神啊。。。必然还是我太弱了。。第一次搞,参考了别人的代码。将A建立成后缀自动机,后缀自动机的任意一个节点都表示若干个A的字串,让B在后缀自动机上匹配,不能匹配就沿着f指针转移就是了。在这个过程中维护自动机的一个节点对应的right集合的最大匹配长度。取最大值就是答案。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #inc 阅读全文
posted @ 2013-02-20 19:29 proverbs 阅读(984) 评论(0) 推荐(0) 编辑