字符串-自动机
Phoenix丶HN
这个作者很懒,什么都没留下…
展开
-
HDU5782(结论题hash+字符串同构)
【题目大意】 给出两个字符串,判断他们每一个前缀是否循环同构,循环同构的意思就是,字符串首位相接拼成一个环,两个环通过旋转可以相等。 【题解】 这道题用到了一个神奇的结论,如果S字符串和T字符串循环同构,那么必有S=u+v,T=v+u,而且u和v必有一个是最长匹配。 那么根据这个结论,我们可以用KMP算法在T中找S的最长前缀,也就是每次匹配到i时候的j。那么对于T的前缀和原创 2017-07-28 10:34:01 · 443 阅读 · 0 评论 -
HDU5880(AC自动机)
多模字符串匹配模板#include #include #include #include #include using namespace std; int ans[1000010],cnt[1000010]; struct Trie { int next[1000010][26],fail[1000010],End[1000010]; int root,L,pos;原创 2017-08-07 20:13:43 · 372 阅读 · 0 评论 -
HDU5769后缀数组,高度数组模板
这个后缀数组模板复杂度O(n),但是长度太大,可以看做nlog(n).高度数组可以利用后缀数组O(n)求出!#include #include #include #include #include using namespace std; typedef long long ll; const int inf=0x3f3f3f3f; const int MAXN=100010; int原创 2017-07-26 20:03:34 · 393 阅读 · 0 评论 -
HDU4691用RMQ求所有字符串后缀的最长公共前缀
测试证明板子二虽然常数大。但是还是比板子一快的多。 板子1: 复杂度n*log*log #include #include #include #include #include #define ll long long #define maxn 100010 using namespace std; char s[maxn]; int n,k,q; int rank[maxn],s原创 2017-07-26 21:09:32 · 372 阅读 · 0 评论