ekmp模板
Posted benzikun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ekmp模板相关的知识,希望对你有一定的参考价值。
模板,自己用
ll enext[maxn],extend[maxn]; char s[maxn],t[maxn]; void getnext(char *t) int len=strlen(t),a=0; enext[0]=len; while(a<len-1 && t[a]==t[a+1]) a++; enext[1]=a; a=1; for(int k=2;k<len;k++) int p=a+enext[a]-1,L=enext[k-a]; if((k-1)+L>=p) int j=(p-k+1)>0 ? (p-k+1) : 0; while(k+j<len && t[k+j]==t[j]) j++; enext[k]=j; a=k; else enext[k]=L; void getextend(char *s,char *t) int slen=strlen(s),tlen=strlen(t),a=0; getnext(t); int MinLen = slen < tlen ? slen : tlen; while(a<MinLen && s[a]==t[a]) a++; extend[0]=a; a=0; for(int k=1;k<slen;k++) int p=a+extend[a]-1, L=enext[k-a]; if((k-1)+L>=p) int j=(p-k+1)>0 ? (p-k+1) : 0; while(k+j<slen && j<tlen && s[k+j]==t[j]) j++; extend[k]=j; a=k; else extend[k]=L;
以上是关于ekmp模板的主要内容,如果未能解决你的问题,请参考以下文章
kuangbin专题十六 KMP&&扩展KMP HDU3613 Best Reward(前缀和+manacher or ekmp)