因为manacher算法把原来的字符串扩大了两倍,因此在应用时许多二级结论都非常不直观,现场推出来很麻烦,因此笔者在此做个简单整理,如果发现有错误或者有常用的我没有涉及到的,恳请在下方评论区指出,我会非常感谢。
#include<iostream> #include<cstdio> #include<cstring> #define MAXN 200005 using namespace std; char str[MAXN]; char ex[MAXN*2]; int rad[MAXN*2]; void make_char(const char *str,char *ex){ int l=strlen(str); int i,j; j=0; ex[0]='$'; for(i=0;i<l;i++){ ex[++j]='#'; ex[++j]=str[i]; } ex[++j]='#'; ex[++j]='