最长回文 HDU - 3068 (Mannacher模板题)

Posted overrate-wsj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长回文 HDU - 3068 (Mannacher模板题)相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<algorithm>
#include<cstring>
 using namespace std;
 const int maxn=110010;
 char t[maxn],s[maxn*3];
 int p[maxn*3],lens;
 void init()
 {
     memset(s,,sizeof(s));
     int len=strlen(t);
     lens=0;
     s[lens++]=+;
     for(int i=0;i<len;i++)    s[lens++]=#,s[lens++]=t[i];
     s[lens]=#;
 }
 int Manacher()
 {
     int Maxlen=1,id=0,mx=0;
     memset(p,0,sizeof(p));
    for ( int i=1; i<lens; i++ ){
        p[i]= mx>i ? min( p[2*id-i],mx-i) : 1;
        while( s[i-p[i]] == s[i+p[i]] ) p[i]++;
        if( mx < i+p[i] ) mx=i+p[i], id=i;
        Maxlen=max( Maxlen,p[i]-1);
    }
    return Maxlen;
 }
 int main()
 {
     while(~scanf("%s",t)){
         init();
         printf("%d
",Manacher());
     }
     return 0;
 }

 

以上是关于最长回文 HDU - 3068 (Mannacher模板题)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 3068 最长回文(马拉车)

HDU 3068 最长回文

HDU 3068 最长回文

HDU3068 最长回文 MANACHER+回文串

[HDU3068]最长回文

HDU3068 最长回文manacher算法