Template
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| struct exkmp{
int nxt[N],extend[N];
void GetNext(){ int a=0; nxt[0]=m; while(a<m-1 && t[a]==t[a+1]) a++; nxt[1]=a,a=1; for(int k=2;k<m;k++){ int p=a+nxt[a]-1,L=nxt[k-a]; if(k+L-1>=p){ int j=(p-k+1)>0?p-k+1:0; while(k+j<m && t[k+j]==t[j]) j++; nxt[k]=j; a=k; } else nxt[k]=L; } }
void GetExtend(){ int a=0; while(a<m && s[a]==t[a]) a++; extend[0]=a,a=0; for(int k=1;k<n;k++){ int p=a+extend[a]-1,L=nxt[k-a]; if(k+L-1>=p){ int j=(p-k+1)>0?(p-k+1):0; while(k+j<n && j<m && s[k+j]==t[j]) j++; extend[k]=j; a=k; } else extend[k]=L; } }
}K;
|
Author:
Push_Y
Permalink:
https://wzsyyh.github.io/post/exkmp/
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
I'll make IT!