zoukankan      html  css  js  c++  java
  • #1589 : 回文子串的数量

    manager 算法 求得每个字母为中心的回文串的数量 然后 对那个数组统计一下

    #include<iostream>
    #include<math.h>
    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<vector>
    #include<queue>
    #include<map>
    
    typedef long long ll;
    
    using namespace std;
    
    #define MAXN  800010
    #define inf   1000000000
    
    
    char z[MAXN*2+10],y[MAXN];
    int p[MAXN*2+10];
    
    void Mana(int n)
    {
        int mx=0;
        int id=0;
        for(int i=1;i<n;i++)
        {
            if(mx>i)
                p[i]=min(p[2*id-i],mx-i);
            else
                p[i]=1;
            for(;z[i+p[i]]==z[i-p[i]];p[i]++)
                ;
            if(p[i]+i>mx)
            {
                mx=p[i]+i;
                id=i;
            }
        }
    }
    
    int main()
    {
        scanf("%s",y);
        int l=1;
        z[0]='&';
        z[l++]='#';
        int len=strlen(y);
        for(int i=0;i<len;i++)
        {
            z[l++]=y[i];
            z[l++]='#';
        }
        Mana(l);
        ll  ans=0;
        for(int i=1;i<l;i++)
             ans=ans+p[i]/2;
        printf("%lld
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    基于RBAC的权限设计模型
    RBAC用户权限管理数据库设计
    系统多语言实践(二)
    多语言系统的数据库设计
    系统多语言实践(一)
    企业后台模板
    MYSQL
    JS,Jquery
    BootStrap
    KindEditor
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/7703552.html
Copyright © 2011-2022 走看看