poj1745 字尾陣列 二分

2021-08-06 05:09:33 字數 759 閱讀 7952

題目大意:求最長的不重疊重複字串的最大值

思路:二分最長的長度l,然後按照height>=l分組,可以得出每乙個l都會在同一組內,而這組sa[i]max-sa[i]min>=l 則成立

這題輸入的細節比較多需要注意(我會說我t了)

#include

#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fod(i,a,b) for(int i=a;i>=b;i--)

using

namespace

std;

const

int n=20005,inf=1e9;

int n,k,p,q=1;

int a[n],v[n],h[n],sa[2][n],rk[2][n];

void calsa(int sa[n],int rk[n],int sa[n],int rk[n])

void getsa()

void geth()

}bool check(int x)

return0;}

void solve()

if(ans<4)puts("0");

else

printf("%d\n",ans+1);

}int main()

return

0;}

poj1743(字尾陣列 二分)

不可重疊最長重複子串 字尾陣列後,二分最長長度,在維護長度不小於mid時,判斷是否有兩個位置之間的差 mid,表示不重疊,由此更新l,r 方法 字串處理常用二分 字尾陣列常用分組 分組的本質就是這個組均包含長度為mid的子串,就是這個組的長度為mid的字首都相同 include include in...

poj 1743 字尾陣列 二分判定

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 與其...

1402 字尾陣列 (hash 二分)

描述 字尾陣列 sa 是一種重要的資料結構,通常使用倍增或者dc3演算法實現,這超出了我們的討論範圍。在本題中,我們希望使用快排 hash與二分實現乙個簡單的 o n log 2 n 的字尾陣列求法。詳細地說,給定乙個長度為 n 的字串s 下標 0 n 1 我們可以用整數 k 0 k 輸入格式 乙個...