zoukankan      html  css  js  c++  java
  • manacher --- 暂 旧版本

      

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 110010;
    char str[N], aim[N<<1];
    int n;
    int len[N*2];
    void manacher()
    {
        memset(len, 0, sizeof(len));
        aim[0] = '$'; aim[1] = '#';
        int Maxid = 0;
        int id = 0;
        for(int i = 0, j = 2; i < n; i++){
            aim[j++] = str[i];
            aim[j++] = '#';
        }
        for(int i = 1; i <= n*2+1; i++)
        {
            if(i < Maxid)
                len[i] = min(len[id*2-i], Maxid-i);
            else len[i] = 1;
            while(aim[i-len[i]] == aim[i+len[i]]) len[i]++;
            if(i+len[i] > Maxid)
            {
                Maxid = i+len[i];
                id = i;
            }
        }
    }
    int main()
    {
        while(~scanf("%s", str))
        {
            n = strlen(str);
            manacher();
            int ans = 0;
            for(int i = 1; i <= n*2+1; i++)
                ans = max(ans, len[i]);
            cout << ans - 1 << endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    My Tornado Particle Effect
    [zz] 海洋环境的光能传递
    一道算法题
    Alembic
    一些莫名其妙的东东
    Python Q&A
    <<Exceptional C++>> notes
    CG Rendering v.s. Browser Rendering
    Modo
    Katana
  • 原文地址:https://www.cnblogs.com/MingSD/p/11191042.html
Copyright © 2011-2022 走看看