先用擴充套件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結尾的非字首...