蒟蒻求助manacher
查看原帖
蒟蒻求助manacher
160839
Prean楼主2020/7/4 14:08

全T。。。难道manacher不是线性复杂度吗/yiw

求助QAQ

#include<cstring>
#include<cstdio>
const int M=1.1e7+5;
char n,m,a[M],s[M<<1];
int p[M<<1];
inline int min(const int a,const int b){
    return a>b?b:a;
}
inline void I_AK_IOI(){
    for(int i=1;i<n;++i)s[++m]=a[i],s[++m]='#';
    s[++m]=a[n];
}
inline int manacher(char*s,int len){
    int i,mr=0,mid;
    for(i=1;i<len;++i){
        if(i<mr)p[i]=min(p[(mid<<1)-i],p[mid]+mid-i);
        else p[i]=1;
        while(s[i-p[i]]==s[i+p[i]]&&p[i]<=i)++p[i];
        if(i+p[i]>mr)mr=i+p[i],mid=i;
    }
}
signed main(){
    int i,ans=0;
    scanf("%s",a+1);
    n=strlen(a+1);
    I_AK_IOI();
    manacher(s,m);
    for(i=1;i<m;++i)if(ans<p[i])ans=p[i];
    printf("%d",ans-1);
}
2020/7/4 14:08
加载中...