吉哥系列故事——完美队形II

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 1491    Accepted Submission(s): 555

Problem Description
  吉哥又想出了一个新的完美队形游戏。

  如果有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
 
Source
题意:求最长回文子串,而外要求:从回文串最中间向两边满足非递增。
分析:在manacher函数中加一个推断,跳过原来的增加的值,以及加一个推断控制最中间向两边满足非递增;
 
 

转载请注明出处:寻找&星空の孩子

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 100010*2 int P[maxn];
//(p.s. 能够看出,P[i]-1正好是原字符串中回文串的总长度)
int s1[maxn];
int s2[maxn];
int n; void manacher(int* s)
{
int i,id=0,mx=0;
P[0]=0;
for(i=1;i<=2*n+1;i++)
{
if(mx > i)
P[i] = min(P[2*id-i],mx-i);
else
P[i] = 1;
while(s[i+P[i]]==s[i-P[i]] )
{
if(s[i+P[i]]!=-2)
{
if(s[i+P[i]]<=s[i+P[i]-2]) P[i]++;
else break;
}
P[i]++;
}
if(mx < P[i] + i)
{
mx = P[i] + i;
id = i;
}
}
} void init()
{
int i, j = 2;
s2[0] =-1, s2[1] = -2; for(i=0;s1[i];i++)
{
s2[j++] = s1[i];
s2[j++] = -2;
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&s1[i]);
init();
manacher(s2);
int ans=0;
for(int i=1;i<=2*n+1;i++)
{
ans=max(ans,P[i]);
}
printf("%d\n",ans-1);
}
return 0;
}

吉哥系列故事——完美队形II(hdu4513+Manacher)的更多相关文章

  1. HDU4513:吉哥系列故事——完美队形II(Manacher)

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  2. HDU 4513 吉哥系列故事——完美队形II(Manacher)

    Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成 ...

  3. HDU 4513 吉哥系列故事——完美队形II (Manacher变形)

    题意:假设有n个人按顺序的身高分别是h[1], h[2] ... h[n],从中挑出一些人形成一个新的队形,新的队形若满足以下要求,则就是新的完美队形:  1.连续的 2.形成回文串 3.从左到中间那 ...

  4. HDU 4513 吉哥系列故事——完美队形II( Manacher变形 )

    链接:传送门 思路:根据完美队形的定义,可以得知,完美队形实质上是 回文串 + 序列出现峰,因为是在回文串中再次增加了一个要求,所以可以对 Manacher 进行改造,改造的部分应该为暴力匹配的循环 ...

  5. HDU4513吉哥系列故事――完美队形II(manacher算法)

    这个比最长回文子串就多了一个条件,就是回文字串(这里相当于人的高度)由两端向中间递增. 才刚刚看了看manacher,在用模板A了一道题后,还没有完全理解manacher,然后就准备把这道题也直接带模 ...

  6. HDU - 4513 吉哥系列故事――完美队形II(manacher)

    1.找出一个最长的回文子串,要求中间的值最大,然后向两侧递减. 2.判断条件改为:Ma[i+Mp[i]]==Ma[i-Mp[i]]&&Ma[i-Mp[i]]<=Ma[i-Mp[i ...

  7. HDU4513 吉哥系列故事——完美队形II Manacher算法

    题目链接:https://vjudge.net/problem/HDU-4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Me ...

  8. hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  9. HDU 4513 吉哥系列故事——完美队形II manacher

    吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希 ...

随机推荐

  1. myBatis的binding错误:Invalid bound statement (not found)

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误这个问题我找了好久,终于找到了正确的写 ...

  2. HNOI2006 潘多拉的盒子

    题目描述 题解: 题目的描述比较长,理解起来也有一定难度.仔细读题后我们发现整个任务可以分成两个部分:找出咒语机之间所有的升级关系.求最长升级序列. 1. 求升级关系: 容易看出,咒语机i可以抽象成一 ...

  3. HNOI2006 花仙子的魔法

    题目描述 题解: 考试的时候手画打表,然后半个小时磨了个式子:$$f[i][j]=f[i-1][j-1]+f[i][j-1]$$ 交上去$A$的时候都蒙了. 考后才知道原因. 考虑$n$维空间内原来有 ...

  4. 15. PARTITIONS

    15. PARTITIONS PARTITIONS表提供有关表分区的信息. 此表中的每一行对应于分区表的单个分区或子分区. 有关分区表的更多信息,请参见分区. PARTITIONS表有以下列: TAB ...

  5. 查询SYS_ORG_TB树的层级

    WITH N(SYS_ORG_ID,SYS_ORG_NAME,LEVEL) AS( AS LEVEL FROM SYS_ORG_TB WHERE SYS_ORG_UPID IS NULL UNION ...

  6. 转:使用 /proc 文件系统来访问 Linux 内核的内容

    使用 /proc 文件系统来访问 Linux 内核的内容 https://www.ibm.com/developerworks/cn/linux/l-proc.html /proc 文件系统并不是 G ...

  7. STM32——输入捕获实验原理及配置步骤

    输入捕获实验原理及配置步骤 一.输入捕获概念 STM32的输入捕获,简单的说就是通过检测 TIMx_CHx (定时器X的通道X)上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定 ...

  8. 【BZOJ 2462】矩阵模板 (二维哈希)

    题目 给定一个M行N列的01矩阵,以及Q个A行B列的01矩阵,你需要求出这Q个矩阵哪些在 原矩阵中出现过. 所谓01矩阵,就是矩阵中所有元素不是0就是1. 输入 输入文件的第一行为M.N.A.B,参见 ...

  9. 【组合数模板】HDU 6114 Chess

    http://acm.hdu.edu.cn/showproblem.php?pid=6114 [思路] 就是求C(m,n) [板] #include<iostream> #include& ...

  10. hdu 2579

    #include<stdio.h> #include<queue> #include<iostream> #include<string.h> #inc ...