hdu3068 最长回文

来源:互联网 发布:在哪里下c语言编程软件 编辑:程序博客网 时间:2024/05/21 16:01

Manacher好久没写了,都忘了。。。。。

#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cmath>#include <queue>#include <vector>using namespace std;#define N 120010int n,T,Ans;int p[N*2];char S[N*2],S1[N*2];void Search(int i){    while(S[i-p[i]]==S[i+p[i]])        p[i]++;}void Manacher(){    int x=1,m=0;    for(int i=1;i<=n;i++)    {        p[i]=1;        if(m>=i)            p[i]=min(m-i,p[2*x-i]);        Search(i);        Ans=max(Ans,p[i]-1);        if(m<i+p[i]-1)            m=i+p[i]-1,x=i;    }}int main(){    while(scanf("%s",S1+1)!=EOF)    {        int len=(int)strlen(S1+1);        n=0;        for(int i=1;i<=len;i++)            S[++n]='#',S[++n]=S1[i];        S[++n]='#';        S[0]='$';        Ans=1;Manacher();        printf("%d\n",Ans);    }    return 0;}



0 0
原创粉丝点击