zoukankan      html  css  js  c++  java
  • 【POI 2010】 Antisymmetry

    【题目链接】

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

    【算法】

               manacher

    【代码】

               

    #include<bits/stdc++.h>
    using namespace std;
    #define MAXN 500010
    
    int n;
    char s[MAXN];
    
    inline void Manacher()
    {
            int i,len,mx = 0,pos = 0;
            long long ans = 0;
            static char tmp[MAXN<<1];
            static int p[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 (tmp[i] != '#')
                    {
                            p[i] = 1;
                            continue;
                    }
                    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]] == '#') || (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++) 
            {
                    if (tmp[i] == '#')
                            ans += (long long)(p[i] - 1) / 2;
            }
            printf("%lld
    ",ans);
    }
    
    int main() 
    {
            
            scanf("%d%s",&n,s+1);
            Manacher();
            
            return 0;
        
    }
  • 相关阅读:
    Fluent API
    什么是blazor
    10.事务
    9.用ExecuteSqlCommand执行存储过程
    8.自增主键 插入指定主键的数据
    7.图
    6.实体与上下文的关系
    5.并发
    4.跟踪
    3.级联删除
  • 原文地址:https://www.cnblogs.com/evenbao/p/9248951.html
Copyright © 2011-2022 走看看