高手过愚人节 Manancher模板题_双倍经验
Posted guangheli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高手过愚人节 Manancher模板题_双倍经验相关的知识,希望对你有一定的参考价值。
Code:
#include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) freopen(s".in","r",stdin) #define maxn 10001000 using namespace std; char s[maxn],str[maxn]; int p[maxn]; int Init(){ int len=strlen(s); str[0]=‘$‘,str[1]=‘#‘; int j=1; for(int i=0;i<len;++i) str[++j]=s[i],str[++j]=‘#‘; str[++j]=‘ ‘; return j; } int Manancher(){ int len=Init(),maxv=0,id=1,mx=1; for(int i=1;i<len;++i){ if(mx>i) p[i]=min(p[2*id-i],mx-i); else p[i]=1; while(str[i-p[i]]==str[i+p[i]]) p[i]++; if(mx<i+p[i]) id=i,mx=i+p[i]; maxv=max(maxv,p[i]-1); } return maxv; } int main(){ int n; scanf("%d",&n); while(n--){ memset(p,0,sizeof(p)); scanf("%s",s); printf("%d ",Manancher()); } return 0; }
以上是关于高手过愚人节 Manancher模板题_双倍经验的主要内容,如果未能解决你的问题,请参考以下文章
[国家集训队]拉拉队排练 Manancher_前缀和_快速幂