BZOJ3670 動物園 擴充套件KMP

2021-08-19 08:18:35 字數 1000 閱讀 9273

先用擴充套件kmp求出si

..n si.

.n

與s s

的lcpne

xti' role="presentation" style="position: relative;">nex

tine

xti。

考慮每個字尾si

..n si.

.n

的所有字首si

..k si.

.k

對numk

n um

k的貢獻,有貢獻的

k k

顯然是在乙個區間[i

,min(2

i−1,

i+ne

xti)

−1]' role="presentation" style="position: relative;">[i,

min(2i

−1,i

+nex

ti)−

1][i

,min(2

i−1,

i+ne

xti)

−1],在差分陣列中加減一下,最後字首和即可。

**:

#include

#include

#include

#define n 1000010

#define ll long long

using

namespace

std;

const

int mod=1000000007;

int n,nxt[n],***[n];

char s[n];

void ex_kmp()

if(ed1,st=i;

for(int j=ed-i+1;ed1]==s[j+1];j++,ed++);

st=i;nxt[i]=max(ed-i+1,0);

}}int main()

return

0;}

BZOJ3670 動物園(KMP演算法)

bzoj 神tm閱讀理解題 看完題目之後 想暴力 搞個倍增陣列來跳ne xt每次暴跳ne xt複雜度o tnlo gn 算一下,感覺複雜度差不多呀 很果斷的交了一發 然後80 分。暴力 送上 include include include include include include includ...

BZOJ3670動物園 KMP變形

description 近日,園長發現動物園中好吃懶做的動物越來越多了。例如企鵝,只會賣萌向遊客要吃的。為了整治動物園的不良風氣,讓動物們憑自己的真才實學向遊客要吃的,園長決定開設演算法班,讓動物們學習演算法。某天,園長給動物們講解kmp演算法。園長 對於乙個字串s,它的長度為l。我們可以在o l ...

洛谷2375 BZOJ 3670動物園題解

題目鏈結 洛谷鏈結 我們發現題目要我們求的num i 東西本質上其實是 求有多少以i結尾的非字首且能與字首匹配的字串,而且要求字串長度小於 i 2 我們先不考慮字串長度的限制,看所有以i結尾的非字首且能與字首匹配的字串如何計數 考慮到kmp演算法的next陣列求解的過程,大家應該都想到i結尾的非字首...