Manacher模板
Posted shen-yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Manacher模板相关的知识,希望对你有一定的参考价值。
小小模板,是个好东西呀!!
#include <cstdio> #include <cmath> #include <deque> #include <stack> #include <queue> #include <cmath> #include <cstring> #include <algorithm> #include <iostream> using namespace std; #define ll long long #define ull unsigned long long const int Maxn=22000001; const int inf=2147483647; int n,m,hw[Maxn]; char s[Maxn],a[Maxn]; void change() { s[0]=s[1]=‘#‘; for(int i=0; i<n; i++) { s[i*2+2]=a[i]; s[i*2+3]=‘#‘; } n=n*2+2; s[n]=0; return; } int main() { cin>>a; n=strlen(a); change(); int r=0,mid=0; for(int i=1; i<n; i++) { if(i<r) hw[i]=min(hw[mid-(i-mid)],hw[mid]-(i-mid)); else hw[i]=1; while(s[i+hw[i]]==s[i-hw[i]]) ++hw[i]; if(i+hw[i]>r) { r=hw[i]+i; mid=i; } } int ans=1; for(int i=0; i<n; i++) ans=max(ans,hw[i]); cout<<ans-1<<endl; return 0; }
以上是关于Manacher模板的主要内容,如果未能解决你的问题,请参考以下文章