• V


      吉哥又想出了一个新的完美队形游戏! 
      假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 

      1、挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的; 
      2、左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个人可以任意; 
      3、从左到中间那个人,身高需保证不下降,如果用H表示新队形的高度,则H[1] <= H[2] <= H[3] .... <= H[mid]。 

      现在吉哥想知道:最多能选出多少人组成新的完美队形呢?

    Input  输入数据第一行包含一个整数T,表示总共有T组测试数据(T <= 20); 
      每组数据首先是一个整数n(1 <= n <= 100000),表示原先队形的人数,接下来一行输入n个整数,表示原队形从左到右站的人的身高(50 <= h <= 250,不排除特别矮小和高大的)。Output  请输出能组成完美队形的最多人数,每组输出占一行。Sample Input

    2
    3
    51 52 51
    4
    51 52 52 51

    Sample Output

    3
    4
    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    #include<string>
    #include<map>
    #include<cstring>
    #include<fstream>
    using namespace std;
    #define MAXN 100010
    typedef long long LL;
    /*
    从一个序列中挑选一个子序列
    要求:1.在原序列的顺序不变
    2.回文
    3.从左边到中间身高不下降
    最长递增回文连续子序列
    */
    int a[MAXN],s[MAXN*2],r[MAXN*2],T,n;
    void Manacher()
    {
        int p = 0;
        s[p++] = -2;
        s[p++] = -1;
        for(int i=0;i<n;i++)
        {
            s[p++] = a[i];
            s[p++] = -1;
        }
        s[p] = 251;
        int Max=0,pos=0;//Max表示当前匹配到的最大右端位置,pos表示该位置对应的对称轴
        for(int i=0;i<p;i++)
        {
            r[i] = (Max>i)?min(r[2*pos-i],Max-i):1;
            while(s[i+r[i]]==s[i-r[i]]&&s[i-r[i]]<=s[i-r[i]+2])
                r[i]++;
            if(i+r[i]>Max)
            {
                Max = i+r[i];
                pos = i;
            }
        }
    }
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            memset(r,0,sizeof(r));
            memset(s,0,sizeof(s));
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            Manacher();
            int ans = 0;
            for(int i=0;i<2*n+2;i++)
            {
                ans = max(ans,r[i]-1);
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    【网易官方】极客战记(codecombat)攻略-地牢-健忘的宝石匠
    【网易官方】极客战记(codecombat)攻略-地牢-深藏的宝石
    【网易官方】极客战记(codecombat)攻略-地牢-Kithgard 地牢
    【网易官方】极客战记(codecombat)攻略[地牢]:祸之火焰-通关代码及讲解
    spring可以接收的正则的方式
    Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
    EnableRetry
    https://www.youtube.com/watch?v=kwuu1efzkf4 38分
    https://gitee.com/createmaker/reactor-examples reactor编程代码
    webflux 20201011
  • 原文地址:https://www.cnblogs.com/joeylee97/p/6692903.html
Copyright © 2020-2023  润新知