zoukankan      html  css  js  c++  java
  • hdu5371Hotaru's problem manacher算法

    //给一个序列。让求其最大子序列
    //这个序列由三段组成。第一段和第二段对称,第一段和第三段一样
    //manacher算法求得p[i]
    //枚举第二段的起点和长度,得到结果
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std ;
    const int maxn = 2e5 + 10 ;
    int str[maxn] ;
    int p[maxn] ;
    void pk(int n)
    {
        int i;
        int mx = 0;
        int id=0;
        for(i=0; i<n; i++)
        {
            if( mx > i )
                p[i] = min( p[2*id-i], mx-i );
            else
                p[i] = 1;
            for(; str[i+p[i]] == str[i-p[i]] && i - p[i] >= 0 && i + p[i] < n; p[i]++);
            if( p[i] + i > mx )
            {
                mx = p[i] + i;
                id = i;
            }
        }
    }
    int main()
    {
        int t  ;
        int cas = 0 ;
        int  n ;
        scanf("%d" , &t) ;
        while(t--)
        {
            scanf("%d" , &n) ;
            for(int i = 0;i <= 2*n+1;i++)
            p[i] = 0 ;
            int len = 0 ;
            str[len++] = -1 ;
            for(int i = 1;i <= n;i++)
            {
                scanf("%d" , &str[len++]) ;
                str[len++] = -1 ;
            }
            int ans = 1 ;
            pk(len) ;
            for(int i = 2;i < len-1 ;i += 2)
              for(int j = ans;j <= p[i] ;j += 2)
                if(p[i + j -1]>= j)
                  ans = j;
            ans = ans/2*3 ;
            printf("Case #%d: ",++cas) ;
            cout<<ans<<endl;
        }
        return 0 ;
    }
    
    
    
    
  • 相关阅读:
    浅谈三层模式
    javascript的全局变量
    BZOJ 3668 NOI2014 起床困难综合症 贪心
    调试经验--图像
    Mac OS X 10.10 执行 Eclipse 提示须要安装 Java
    ubuntuOS
    BLOB存储图片文件二进制数据是非对错
    API经济产业
    python模块目录文件后续
    MongoDB命令
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7142581.html
Copyright © 2011-2022 走看看