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

【HDU】3068 最长回文

时间:2017-04-05 20:30:42      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:class   display   cst   http   ace   ret   html   algorithm   algo   

【算法】manacher

【题解】【算法】字符串

技术分享
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=300010;
int n,p[maxn];
char s[maxn],ss[maxn];
void manacher()
{
    int mx=0,id=0;
    int ans=0;
    for(int i=2;i<=n;i++)//$不管 
     {
         if(i<mx)
          {
              p[i]=min(p[id*2-i],mx-i+1);
          }
         else p[i]=1;
         while(s[i+p[i]]==s[i-p[i]])p[i]++;
         if(i+p[i]-1>mx)
          {
              mx=i+p[i]-1;
              id=i;
          }
         ans=max(ans,p[i]-1);
     }
    printf("%d\n",ans);
}
int main()
{
    while(scanf("%s",ss+1)==1)
     {
         int tot=strlen(ss+1);
        n=2;s[1]=$;s[2]=#;
        for(int i=1;i<=tot;i++)s[++n]=ss[i],s[++n]=#;
        manacher();
     }
    return 0;
}
View Code

 

【HDU】3068 最长回文

标签:class   display   cst   http   ace   ret   html   algorithm   algo   

原文地址:http://www.cnblogs.com/onioncyc/p/6670173.html

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