zoukankan      html  css  js  c++  java
  • 2015 多校联赛 ——HDU5371(manacher + 枚举)

    Sample Input
    1 10 2 3 4 4 3 2 2 3 4 4
     
    Sample Output

    Case #1: 9

    要求找出一段数字。

    将其分成3部分,第①和第②部分成回文字串,第②和第③部分成回文字串

    用manacher算出各个点的回文字串长度,然点枚举和半径(后部分稍不注意就超时  - -!!)


    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #define MAXN 100010
    using namespace std;
    
    int n;
    int d[MAXN];
    int st[MAXN*2];
    int p[MAXN*2];
    int len;
    void manacher()
    {
        int MaxId=0,id;
        for(int i=0; i<len; i++)
        {
            if(MaxId>i)
                p[i]=min(p[2*id-i],MaxId-i);
            else
                p[i]=1;
            while(st[i+p[i]]==st[i-p[i]])
                p[i]++;
            if(p[i]+i>MaxId)
            {
                id=i;
                MaxId=p[i]+i;
            }
        }
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        for(int t=1; t<=T; t++)
        {
            scanf("%d",&n);
            for(int i = 0; i <= 2*n+1; i++)
                p[i] =0;
            len = 0;
            st[len++]= -2;
            st[len++]= -1;
            for(int i=1; i<=n; ++i)
            {
                scanf("%d",&st[len++]);
                st[len++] = -1;
            }
            st[len] = 0;
            manacher();
            int maxans=1;
            for(int i = 3; i < len; i+=2)
                for(int j = maxans; j <= p[i]; j+=2)
                {
                    if(p[j+i-1] >= j)
                        maxans = j;
                }
                printf("Case #%d: %d
    ",t,(maxans)/2*3);
        }
        return 0;
    }</span>
    

      











  • 相关阅读:
    VueJS promise
    VueJS vue-router-keep-alive
    VueJS电商管理系统(Element-UI)B站学习笔记
    VueJS 对象更新
    CSS 类名选择器
    VueJS 全局导航守卫
    VueJS v-model 双向绑定
    JS 高阶函数 filter/map/reduce
    VueJS filters过滤器
    UVA1601-双向广度优先搜索
  • 原文地址:https://www.cnblogs.com/Przz/p/5409784.html
Copyright © 2011-2022 走看看