求子串的出現次數。用類似拓撲排序的思想,從沒有出度的節點開始把他的cnt加在他的字尾連線上。
#include using namespace std;
typedef long long ll;
struct node
void copynewnode(const int &l, const node& n)
};const int maxn = 1000000;
struct edge edge[(maxn << 1) + 5];
int etop;
//suffixautomaton
struct sam
void extend(char ch) }}
void dfs(int id)
}ll solve()
dfs(1);
ll res = 0;
for(int i = top; i >= 2; --i)
if(nd[i].cnt > 1)
return res;
}} sam;
char s[maxn + 5];
int main()
這個link樹不如回文機優美,但是可以用拓撲排序來非遞迴求。
#include using namespace std;
typedef long long ll;
struct node
void copynewnode(const int &l, const node& n)
};const int maxn = 1000000;
//suffixautomaton
struct sam
void extend(char ch) }}
int d[(maxn << 1) + 5];
int que[(maxn << 1) + 5], front, back;
ll solve()
ll res = 0;
for(int i = top; i >= 2; --i)
if(nd[i].cnt > 1)
return res;
}} sam;
char s[maxn + 5];
int main()
兩個字串st的最長公共子串,對s構造sam。然後逐個比較t的字首。其實是逐個加入t的字元c,每次都嘗試往後走到c,成功則len+1,否則退後到他的字尾連線上,同時更新len,直到沒有辦法繼續字尾連線則這個字元徹底失配。比dp解法快多了。
記得要偏移』a'就都偏移'a',別演戲。
#include using namespace std;
typedef long long ll;
struct node
void copynewnode(const int &l, const node& n)
};const int maxn = 250000;
//suffixautomaton
struct sam
void extend(char ch) }}
int longestcommonsubstring(char *t)
if(nd[u].ch[c]) }}
/*for(int i = endpos - ans + 1; i <= endpos; ++i)
putchar(t[i]);
putchar('\n');*/
return ans;
}} sam;
char s[maxn + 5], t[maxn + 5];
int main()
多個字串的lcs。又wa又t。
#include using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
struct node
void copynewnode(const int &l, const node& n)
};const int maxlen = 100000;
const int maxnode = 2 * maxlen + 5;
//suffixautomaton
struct sam
void extend(char ch) }}
int d[maxnode];
int que[maxnode], front, back;
void updatelink()
}void longestcommonsubstringhelp(char *t)
if(nd[u].ch[c])
}updatelink();
return;
}int longestcommonsubstring()
} sam;
char s[maxlen], t[maxlen];
int main()
字尾自動機模板
include include define maxc 28 using namespace std const int maxn 1e6 5 const int mod 1e9 7 typedef long long ll int len maxn 2 最長子串的長度 該節點字串數量 len x ...
模板 字尾陣列 字尾自動機
關於字尾自動機sam,貼乙個非常好的講解 字尾自動機學習小記 交洛谷模板可a 傳送門 洛谷 模板 字尾排序 include using namespace std const int n 1e6 5 char s n int sa n t1 n t2 n c n int n,m 555 void s...
字尾自動機模板(初步)
看了幾天居然連字尾自動機的構造原理和性質都沒完全搞懂。更不用說應用了。在這裡膜一下先輩clj大神 的ppt 大神的世界就是不懂。另外還要膜一下國家集訓隊的幾篇 作者,表示還沒看懂orz 先貼乙個講得通俗易懂的字尾自動機學習 蒟蒻的我居然仍然沒看懂 講得也夠詳細。學習 苦逼的我 乙個下午就死記硬背了這...