马拉车模板
void malache()
{
word3[0]='!';
int len=strlen(word1);
for(int i=1;;i++)
{
if(i%2==0)
{
if(i/2-1==len)
{
word3[i]='~';
word3[i+1]=0;
break;
}
word3[i]=word1[i/2-1];
}
else word3[i]='#';
}
int maxx=0,id=0;
for(int i=0;word3[i];i++)
{
if(i<maxx)p[i]=min(p[2*id-i],maxx-i);
else p[i]=0;
while(i-p[i]-1>=0&&word3[i+p[i]+1]==word3[i-p[i]-1])p[i]++;
if(i+p[i]>maxx)
{
id=i;
maxx=i+p[i];
}
}
}

浙公网安备 33010602011771号