明天就要开始电子的新生活了
先学个马拉车算法压压惊
这篇博还是很好懂的
大佬写的易懂文
忘记发了。。。
昨天搞linux虚拟机搞了很久
先敲个manacher压压惊
#include<bits/stdc++.h>
using namespace std;
char s[100005],t[100005];
int l[100005];
void manacher(){
int len=strlen(s),pos=2;
//先初始化t数组
t[0]='$',t[1]='#';
for(int i=0;i<len;i++){
t[pos]=s[i];
t[pos+1]='#';
pos+=2;
}
//开始计算
int cenlen=0,cenpos=0,mx=0,id=0;
for(int i=1;i<pos;i++){
l[i]=i<mx?max(i-mx,l[2*id-i]):1;
while(t[i+l[i]]==t[i-l[i]])++l[i];
if(i+l[i]>mx){
mx=i+l[i];
id=i;
}
if(l[i]>cenlen){
cenlen=l[i];
cenpos=i;
}
}
for(int i=(cenpos-cenlen)/2;i<cenlen-1;i++){
printf("%c",s[i]);
}
printf("\n");
printf("%d",cenlen-1);
}
int main(){
while(~scanf("%s",s)){
manacher();
}
return 0;
}