題目大意:求最長的不重疊重複字串的最大值
思路:二分最長的長度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 輸入格式 乙個...