#include#include#include#includeusing namespace std;
//sa[i] : 表示 排在第i位的字尾 起始下標
//rank[i] : 表示字尾 suffix(i)排在第幾
//height[i] : 表示 sa[i-1] 與 sa[i] 的lcp 值
//h[i]: 表示 suffix(i)與其排名前一位的 lcp值
const int n = int(2e5)+10;
int cmp(int *r,int a,int b,int l)
// 用於比較第一關鍵字與第二關鍵字,
// 比較特殊的地方是,預處理的時候,r[n]=0(小於前面出現過的字元)
int wa[n],wb[n],ws[n],wv[n];
int rank[n],height[n];
void da(int *r,int *sa,int n,int m)
int a[n],n;
int sa[n];
vectors[n];
bool check(int k)}}
return flag;
}int solve()
return res>=4?res+1:0;
}int main()
}
poj1743(字尾陣列 二分)
不可重疊最長重複子串 字尾陣列後,二分最長長度,在維護長度不小於mid時,判斷是否有兩個位置之間的差 mid,表示不重疊,由此更新l,r 方法 字串處理常用二分 字尾陣列常用分組 分組的本質就是這個組均包含長度為mid的子串,就是這個組的長度為mid的字首都相同 include include in...
poj 1743 字尾陣列
字尾陣列,求不可重疊最長重複字串。include include include include include include define maxd 21000 using namespace std int r maxd rank maxd height maxd int sa maxd wa...
POJ 1743 字尾陣列
這裡有一篇 總結了很多字尾陣列的用法,是 字尾陣列 處理字串的有力工具 羅穗騫 裡面又很多關於這個字尾陣列的具體用法,其中就包括這個不可重疊最長重複子串 這個題的意思就是求解不可重疊最長重複子串,但是這裡有乙個問題,他的串中也可以是相似的 每個數之間的差值相同的 那麼我們就可以利用這個差相同的性質,...