zoukankan      html  css  js  c++  java
  • Manacher笔记

    (其实还是回文自动机好用,毛子真是牛逼)

    Manacher

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 using namespace std;
     6 char s[100001];
     7 int manacher(char s[]){
     8     int maxn=0,p[200001],mx=0,id=0,len=strlen(s);
     9     char st[200001];
    10     st[0]='$';
    11     for(int i=0;i<len;i++){
    12         st[i*2+1]='#';
    13         st[(i+1)*2]=s[i];
    14     }
    15     st[len*2+1]='#';
    16     for(int i=0;i<2*len;i++){
    17         if(i<mx)p[i]=min(p[id*2-i],mx-i);
    18         else p[i]=1;
    19         while(st[i-p[i]]==st[i+p[i]])p[i]++;
    20         if(i+p[i]>mx){
    21             mx=i+p[i];
    22             id=i;
    23         }
    24         maxn=max(maxn,p[i]-1);
    25     }
    26     return maxn;
    27 }
    28 int main(){
    29     scanf("%s",s);
    30     printf("%d",manacher(s));
    31     return 0;
    32 }

    毕竟是线性算法,又好背,尊重一下人家咯~

  • 相关阅读:
    psi
    firefox修改语言
    automapper
    堆喷图解
    脱壳系列_0_FSG壳_详细版
    脱壳系列_1_UPX壳_详细版
    算法01-最大子数组详解
    逆向MFC程序
    如何执行shell命令
    Unity之流光效果
  • 原文地址:https://www.cnblogs.com/dcdcbigbig/p/8952738.html
Copyright © 2011-2022 走看看