码迷,mamicode.com
首页 > 其他好文 > 详细

poj 3974 Palindrome

时间:2016-05-09 22:01:32      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

/*
裸地manachar 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000010
using namespace std;
int l,len[maxn];
char s[maxn],ss[maxn];
int manachar()
{
    int ans=0;
    int id=-1,mx=-1;
    for(int i=1;i<=l;i++)
      {
          if(id+mx-i>=0)
            len[i]=min(id+mx-i,len[id*2-i]);
          while(i-len[i]-1>=0&&i+len[i]+1<=l&&s[i-len[i]-1]==s[i+len[i]+1])
            len[i]++;
          if(i+len[i]>id+mx)
            {
                id=i;mx=len[i];
          }
        ans=max(ans,len[i]);
      }
    return ans;
}
int main()
{
    int cas=0;
    while(scanf("%s",ss))
      {
          if(strcmp(ss,"END")==0)break;
          l=strlen(ss);
          memset(len,0,sizeof(len));
          for(int i=0;i<l;i++)
            {
                s[i*2+1]=ss[i];
                s[i*2+2]=#;
          }
        l=l*2;
        s[0]=#;
        manachar();
        printf("Case %d: %d\n",++cas,manachar());
      }
    return 0;
}

 

poj 3974 Palindrome

标签:

原文地址:http://www.cnblogs.com/yanlifneg/p/5475431.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!