bzoj 2119 字尾陣列

2021-07-23 19:58:01 字數 910 閱讀 9103

題意:給乙個串,求形如aba,其中b的長度為m,a的長度不限的子串的數量。

求正串反串的字尾陣列和對於h的rmq。列舉a串長度len,對於每個長度為len的區間處理在這段區間開始的子串個數。

每隔len列舉i,然後用rmq求i和i+len+m的最長公共字首字尾l,r。統計長度為len的在區間 [ i-l+1 , i+r-1 ] 內部的長度為len的串個數。

為了避免算重,l和r對len取min。

#include 

using namespace std;

#define n 101000

#define ll long long

int n,m,cnt;

ll ans;

int a[n],b[n],bir[n];

struct suffix_array

void getsa()

for(int i=1;i<=n;i++)

}for(int i=1;i<=20;i++)

for(int j=1;j<=n;j++)

if(j-(1

<1)>0)

h[j][i]=min(h[j][i-1],h[j-(1

<1)][i-1]);

}

int query(int

x,int

y)

s1.getsa();

s2.getsa();

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

for(int len=1;len*2+m

<=n;len++)

for(int i=1;i+len+m

<=n;i+=len)

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

return

0;}

bzoj 1692 字尾陣列

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

BZOJ1031(字尾陣列)

題意 給出乙個字串,求出所有全排列後,按字典序從小到大排序,每個串的最後一位組成的字串 題解 字尾陣列搞一搞,將他複製一遍,跑乙個sa,那麼對於長度n以後的字串在sa中可以不管,算是個模板題吧 include include include include include include inclu...

bzoj3998 字尾陣列複習

對於乙個給定長度為n的字串,求它的第k小子串是什麼。其中可能有重複和不重複的k小子串。我只會字尾陣列 sa做法 當t 0的詢問,我們從sa i 開始,每次sa i 這個字尾,我們會加入n sa i 1個子串,其中height i 個是和sa i 1 重複的,所以我們記乙個變數每次加上n 1 heig...