zoukankan      html  css  js  c++  java
  • 【BZOJ 3790】 神奇项链

    【题目链接】

                https://www.lydsy.com/JudgeOnline/problem.php?id=3790

    【算法】

              manacher + 贪心

    【代码】

              

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 500010
    
    char s[MAXN];
    
    struct info
    {
            int l,r;
    };
    inline bool cmp(info a,info b)
    {
            return a.l != b.l ? a.l < b.l : a.r > b.r;
    }
    inline void Manacher()
    {
            int i,len,pos = 0,mx = 0,n = 0,ans,r;
            static int p[MAXN<<1];
            static char tmp[MAXN<<1];
            static info a[MAXN<<1];
            len = strlen(s+1);        
            for (i = 1; i <= len; i++)
            {
                    tmp[2*i-1] = '#';
                    tmp[2*i] = s[i];
            }
            tmp[len = 2 * len + 1] = '#'; 
            for (i = 1; i <= len; i++)
            {
                    if (mx > i) p[i] = min(p[2*pos-i],mx-i);
                    else p[i] = 1;
                    while (i - p[i] >= 1 && i + p[i] <= len && tmp[i-p[i]] == tmp[i+p[i]]) p[i]++;
                    if (i + p[i] - 1 > mx)
                    {
                            mx = i + p[i] - 1;
                            pos = i;
                    }
            } 
            for (i = 1; i <= len; i++) a[++n] = (info){i-p[i]+1,i+p[i]-1};
            sort(a+1,a+n+1,cmp);
            r = a[1].r; ans = 1; pos = 2;
            while (r < len)
            {
                    mx = r;
                    while (pos <= n && a[pos].l <= r + 1) 
                    {    
                            mx = max(mx,a[pos].r);
                            pos++;
                    }
                    ans++; 
                    r = mx;
            }
            printf("%d
    ",ans-1);
    }
    
    int main() 
    {
            
            while (scanf("%s",s+1) != EOF) Manacher();
            
            return 0;
        
    }
  • 相关阅读:
    Linux常用命令大全
    YUM仓库服务
    Keepalived 双机热备
    VML
    CSS3选择器一
    lambda表达式详解
    将博客搬至CSDN
    html5本地数据库(一)
    疯狂的表单-html5新增表单元素和属性
    值类型与引用类型总结
  • 原文地址:https://www.cnblogs.com/evenbao/p/9249765.html
Copyright © 2011-2022 走看看