BZOJ 3796 字尾陣列 KMP

2021-07-26 21:06:52 字數 739 閱讀 1304

思路:

寫得我頭腦發蒙,,, 旁邊還有倆唱歌的 抓狂

(感謝lh大爺查錯)

首先 1、w是s1的子串

2、w是s2的子串

這兩步很好辦啊~ 字尾陣列一下o(n)就可以搞

重點是 這個:3、s3不是w的子串

怎麼辦呢

把 1、3做一發kmp

那麼取一下min就好了

注意重疊的情況

(其實是可以o(n)搞的 我一開始寫錯了 改的時候偷懶就直接二分了)

也很快~

//by siriusren

#include

#include

#include

using

namespace

std;

const

int n=100050;

int len1,len2,len3,n,cnta[n],cntb[n],a[n],b[n],sa[n],tsa[n],rk[n],ht[n],next[n],rec[n],ans;

char s[n],s1[n],s2[n],s3[n];

void sa()

for(int i=1,j=0;i<=n;i++)

}void get_next()

}void kmp()

}}int main()

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

}

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

bzoj 1692 字尾陣列

將乙個字串進行如下操作 每次拿去首或尾,放在新字串尾,問新字串字典序最小的情況。直覺貪心,但情況複雜。可以用字尾陣列,每次比較當前剩餘串正序和倒序哪種字典序小,可以如下構建 abcd abcd0dcba include include include include include include ...