POJ 1226 字尾陣列 或 KMP 或 暴力

2021-08-08 03:39:43 字數 1128 閱讀 3755

簡略題意:出現或反轉後出現在每個字串中的最長字串。

先將每個串和自己的反轉串連線起來,隨後將這若干個串連線起來。二分答案,判定就分組看是否有一組字尾在所有原串或者原串的反轉串中出現。

#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...