hdu 3068一番長い回文
昨日bcを見て問題を解きました。これを見つけました。これを新たに作り始めました。
manaacherアルゴリズム
このブログは素晴らしいです。無敵です。直接リンクhttp://blog.csdn.net/xingyeyongheng/article/details/9310555
彼が書いたのと同じです。
manaacherアルゴリズム
このブログは素晴らしいです。無敵です。直接リンクhttp://blog.csdn.net/xingyeyongheng/article/details/9310555
彼が書いたのと同じです。
include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
char a[110000*2+10];
int p[110000*2+10];
int main()
{
while(scanf("%s",a)==1)
{
int len=strlen(a);
for(int i=len;i>=0;i--)
{
a[i*2+1]='#';
a[i*2+2]=a[i];
}
a[0]='*';
int id=0;
int maxlen=0;
for(int i=1;i<=2*len;i++)
{
if(p[id]+id>i)
{
p[i]=min(p[id]-(i-id),p[id-(i-id)]);
}
else
{
p[i]=1;
}
while(a[i-p[i]]==a[i+p[i]])
{
p[i]++;
}
if(p[i]+i>p[id]+id)
{
id=i;
}
maxlen=max(maxlen,p[i]);
}
cout<<maxlen-1<<endl;
}
return 0;
}