hdu-3068 Manacher算法模板

来源:互联网 发布:电脑自动开关机软件 编辑:程序博客网 时间:2024/05/21 22:58

求最大长度回文串

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[210000],s1[220000];int ans[210000];int Manacher(){     int i;     s[0] = '@';     for(i=1;s1[i]!='\0';i++)     {        s[i*2-1] = '#';        s[i*2] = s1[i];     }     s[i*2-1] = '#';     s[i*2] = '\0';     int mx = 0,id = 0,res = 0;     for(int i=1;s[i]!='\0';i++)      {        ans[i] = mx>i?min(ans[2*id-i],mx-i):1;        while(s[i+ans[i]]==s[i-ans[i]])ans[i]++;        if(i+ans[i]>mx)        {           id = i;           mx = id+ans[id];         }        res = max(ans[i],res);      }      return res-1; }int main(){  while(scanf("%s",s1+1)!=EOF)  {      printf("%d\n",Manacher());  }  return 0;}
0 0
原创粉丝点击