簡略題意:出現或反轉後出現在每個字串中的最長字串。
先將每個串和自己的反轉串連線起來,隨後將這若干個串連線起來。二分答案,判定就分組看是否有一組字尾在所有原串或者原串的反轉串中出現。
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n = 1e5+1100;
int n, q;
int str[n];
char str2[n];
int belong[n];
int f = 0;
int minv;
namespace sa
s1[y = x] = ch;
}if (ch+1
< n1) sais(n1, ch+1, s1, t+n, p+n1);
else
for (int i = 0; i < n1; i++) sa[s1[i]] = i;
for (int i = 0; i < n1; i++) s1[i] = p[sa[i]];
inducedsort(s1);
}template
int mapchartoint(int n, const t *str)
template
void suffixarray(int n, const t *str)
}template
void init(t *str)
int vis[110], count = 0;
void checkinit()
bool check(int x) else
}return
0; }
void solve()
printf("%d\n", l - 1);
}};int t;
int main()
n = s;
sa::init(str);
sa::solve();
}return
0;}
poj2406 kmp,字尾陣列
開始是用字尾陣列做的,rmq果斷超了記憶體,全部改用unsigned short結果又超時,後來參考了 裡的方法。關鍵思想是設k為最小重複字串的長度,則s 0,1 n k 1 s k,k 1 n 1 即lcp rank 0 rank k n k 由於0位置是固定的,只需要對名次迴圈求出最小的k就行!...
POJ 3080 字尾陣列 KMP
題意 給定n個dna串,求最長公共子串。如果最長公共子串的長度小於3時輸出no significant commonalities,否則輸出該子串,如有多解請輸出字典序最小的解 思路 是poj 3405的弱化版。思路請參考 define crt secure no deprecate include...
kmp演算法練習 poj 1226 poj 1961
poj 1226 題目大意 給出一組字串,要你求出這些字串的最長公共子串的長度,公共子串可以正序或逆序匹配 解題思路 kmp列舉,列舉第乙個字串的每個子串的正序和逆序,與其餘的字串匹配看是否是其子串,求出最大的子串長度。這題也可以用字尾樹求,留待後面研究。include include includ...