您的位置:首页 > 其它

hdu 3068(manacher模板)

2017-04-14 13:58 218 查看
https://vjudge.net/problem/19933/origin

中文题意,裸的manacher模板

上代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=110010;
char Mp[2*maxn];
int Ma[2*maxn];
void manacher(int len,char a[]){
int l=0;
Mp[l++]='$';
Mp[l++]='#';
for(int i=0;i<len;i++){
Mp[l++]=a[i];
Mp[l++]='#';
}
Mp[l]=0;
int mx=0,id=0;
for(int i=0;i<l;i++){
Ma[i]=i>mx?1:min(Ma[2*id-i],mx-i);
while(Mp[i+Ma[i]]==Mp[i-Ma[i]])Ma[i]++;
if(mx<i+Ma[i]){
mx=i+Ma[i];
id=i;
}
}
}
int main(){
char a[maxn];
while(~scanf("%s",a)){
int len=strlen(a);
manacher(len,a);
int ans=0;
for(int i=0;i<len*2+2;i++){
ans=max(ans,Ma[i]-1);
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: