为什么这个马拉车加了边界特判就过了?
查看原帖
为什么这个马拉车加了边界特判就过了?
472169
liuxiangbin楼主2022/7/4 18:01

注意看,我在马拉车之前做了些奇奇怪怪的预处理,用特殊字符填充了边界,所以我就不需要做边界判断了。 但是我发现把while中的边界判断去掉的话,是AC不了的。

void Manacher(){
    int l=0,r=0;
    string str="@"+s+'!';
    for(int i=1;i<=n;i++){
        if(i<r){
            int j=l+r-i;
            p[i]=min(p[j],j-l);
        }
        while(i-p[i]-1>=1 and i+p[i]+1<=n and str[i-p[i]-1]==str[i+p[i]+1]) p[i]++;
        if(i+p[i]>r) {
            r = i + p[i];
            l = i - p[i];
        }
    }
}
2022/7/4 18:01
加载中...