zoukankan      html  css  js  c++  java
  • manacher模板

    详细讲解可以看这个

    下面只是些模板


    纯模板

    int manacher()
    {
         // 将数组初始化
        init();
       
        int p[N*2],ans=0,mx=0,max_len=-1,id=0,index;
        // p[i]代表以i为中心的回文串半径,p[i]-1是以i为中心的最长回文串(相对于原字符串)
        //中心点最右端位置mx,id是中心点
        // max_len是该中心点的半径
        //(中心点是指目前半径最长的点)
        for (int i = 1; i < a.size();i++)
        {
            p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;
            //i+p[i]刚好是'未知点'
            while(a[i+p[i]]==a[i-p[i]])
                p[i]++;
            if(mx<i+p[i])
            {
                mx = i + p[i];
                id = i;
            }
        }
        for (int i = 0; i < a.size();i++)
            ans = max(p[i] - 1, ans);
        return ans;
    }
    

    吉哥系列故事——完美队形II

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+6;
    int n,T,x,ans;
    vector<int> a;
    int manacher()
    {
        int p[N*2],ans=0,mx=0,max_len=-1,id=0,index;
        // p[i]代表以i为中心的回文串半径,p[i]-1是以i为中心的最长回文串(相对于原字符串)
        //中心点最右端位置mx,id是中心点
        // max_len是该中心点的半径
        //(中心点是指目前半径最长的点)
        for (int i = 1; i < a.size();i++)
        {
            p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;
            //i+p[i]刚好是'未知点'
            while(a[i+p[i]]==a[i-p[i]]&&a[i+p[i]-2]>=a[i+p[i]])//要记住马拉车中间加了个奇怪字符
                p[i]++;
            if(mx<i+p[i])
            {
                mx = i + p[i];
                id = i;
            }
        }
        for (int i = 0; i < a.size();i++)
            ans = max(p[i] - 1, ans);
        return ans;
    }
    int main()
    {
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d", &n);
            a.clear();
            a.push_back(-1);
            a.push_back(0);
            for (int i = 1; i <= n;i++)
            {
                scanf("%d", &x); //x in 50~250;
                a.push_back(x);
                a.push_back(0);
            }
            printf("%d
    ",manacher());
        }
        return 0;    
    } 
    
  • 相关阅读:
    java_JDBC(3)
    java_JDBC(2)
    java_JDBC(1)
    seq语句随笔
    bzoj3159: 决战
    bzoj3905: Square
    bzoj3864: Hero meet devil
    有上下界的网络流问题
    uva12538
    bzoj3280: 小R的烦恼
  • 原文地址:https://www.cnblogs.com/cherrypill/p/13205017.html
Copyright © 2011-2022 走看看