diff options
| author | mzuenni <mzuenni@users.noreply.github.com> | 2024-07-28 22:54:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-28 22:54:40 +0200 |
| commit | 8d11c6c8213f46f0fa19826917c255edd5d43cb1 (patch) | |
| tree | 96d75baff33d5a04b5a60f1a41f514a26c716874 /string/suffixAutomaton.cpp | |
| parent | 8c33b4e0d3030cfed17fc64b4fe41133339f6d87 (diff) | |
Test (#4)
* update
* moved content in subdir
* rename file
* add test setup
* add test setup
* add github action
* automaticly test all cpp files
* timeout after 10s
* setulimit and dont zero memory
* test build pdf
* install latexmk
* update
* update
* ngerman
* fonts
* removed old code
* add first test
* added tests
* test in sorted order
* more tests
* simplified test
* more tests
* fix suffix tree
* fixes and improvements
* done ust lst directly
* fix swap
* add links to pdf
* fix constants
* add primorial
* add comment
* various improvements
* more tests
* added missing stuf
* more tests
* fix tests
* more tests
* more tests
* more tests
* fix recursion?
* test trie
* more tests
* only use python temporarily for listings
* only use python temporarily for listings
* more tests
* fix longestCommonSubstring
* more tests
* more tests
* made code more similiar
* fix?
* more tests
* more tests
* more tests
* add ahoCorasick test + limit 4GB stack size
* more tests
* fix test
* add additional test
* more tests
* more tests
* fix?
* better fix
* fix virtual tree
* more tests
* more tests
* recursive closest pair
* more tests
* decrease limit
* new tests
* more tests
* fix name
* more tests
* add test
* new test
* more tests
* more tests
* more tests
* more tests
* new test and content
* new code
* new code
* larger tests
* fix and test
* new test
* new test
* update pdf
* remove comments
* new test
* more tests
* more testcases
* more tests
* increased limit
* more tests
* more tests
* more tests
* new tests
* more tests
* shortened code
* new test
* add basic tests for bigint
* more tests
* removed old files
* new test
* ignore some files
* more auto more ccw
* fix test
* more tests
* fix
* new tests
* more tests
* more tests
* stronger test
* actually verify delaunay...
* more tests
* fix header
* more tests
* run tests parallel?
* test parralel?
* add --missing
* separate workflows
* test
* is the pdf checked?
* separate workflows
* fix workflow
* more workflows
---------
Co-authored-by: Yidi <noob999noob999@gmail.com>
Diffstat (limited to 'string/suffixAutomaton.cpp')
| -rw-r--r-- | string/suffixAutomaton.cpp | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/string/suffixAutomaton.cpp b/string/suffixAutomaton.cpp deleted file mode 100644 index 291f760..0000000 --- a/string/suffixAutomaton.cpp +++ /dev/null @@ -1,59 +0,0 @@ -constexpr int ALPHABET_SIZE = 26; -constexpr char OFFSET = 'a'; -struct SuffixAutomaton { - struct State { - int len, link = -1; - array<int, ALPHABET_SIZE> next = {}; // map if large Alphabet - State(int l) : len(l) {} - }; - - vector<State> st = {State(0)}; - int cur = 0; - - SuffixAutomaton(const string& s) { - st.reserve(2 * sz(s)); - for (auto c : s) extend(c - OFFSET); - } - - void extend(int c) { - int p = cur; - cur = sz(st); - st.emplace_back(st[p].len + 1); - for (; p != -1 && !st[p].next[c]; p = st[p].link) { - st[p].next[c] = cur; - } - if (p == -1) st[cur].link = 0; - else { - int q = st[p].next[c]; - if (st[p].len + 1 == st[q].len) { - st[cur].link = q; - } else { - st.emplace_back(st[p].len + 1); - st.back().link = st[q].link; - st.back().next = st[q].next; - for (; p != -1 && st[p].next[c] == q; p = st[p].link) { - st[p].next[c] = sz(st) - 1; - } - st[q].link = st[cur].link = sz(st) - 1; - }}} - - vector<int> calculateTerminals() { - vector<int> terminals; - for (int p = cur; p != -1; p = st[p].link) { - terminals.push_back(p); - } - return terminals; - } - - // Pair with start index (in t) and length of LCS. - pair<int, int> longestCommonSubstring(const string& t) { - int v = 0, l = 0, best = 0, bestp = 0; - for (int i = 0; i < sz(t); i++) { - int c = t[i] - OFFSET; - for (; v && !st[v].next[c]; v = st[v].link) l = st[v].len; - if (st[v].next[c]) v = st[v].next[c], l++; - if (l > best) best = l, bestp = i; - } - return {bestp - best + 1, best}; - } -}; |
