您的位置:首页 > 其它

大二训练第一周 B - 吉哥系列故事――完美队形II manacher

2015-11-03 17:19 363 查看
B - 吉哥系列故事――完美队形II
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d
& %I64u
Submit Status

Description

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

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

  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

 求最长回文子串的长度要求要先递增在递减
ACcode:
#pragma warning(disable:4786)//使命名长度不受限制
#pragma comment(linker, "/STACK:102400000,102400000")//手工开栈
#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <stack>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
#define rds(x) scanf("%s",x)
#define rdc(x) scanf("%c",&x)
#define ll long long int
#define maxn 100005
#define mod 1000000007
#define INF 0x3f3f3f3f //int 最大值
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i)
#define MT(x,i) memset(x,i,sizeof(x))
#define PI  acos(-1.0)
#define E  exp(1)
using namespace std;
int a[maxn],n,loop;
int ma[maxn<<1];
int mp[maxn<<1];
void Manacher(){
int l=0,ans=0;ma[l++]=-INF;ma[l++]=INF;
FOR(i,0,n-1){ma[l++]=a[i];ma[l++]=INF;}
int mx=0,id=0;ma[l]=0;
FOR(i,0,l-1){
mp[i]=mx>i?min(mp[2*id-i],mx-i):1;
while(ma[i+mp[i]]==ma[i-mp[i]]&&(ma[i-mp[i]]<=ma[i-mp[i]+2]))mp[i]++;
if(i+mp[i]>mx){
mx=i+mp[i];id=i;
}
ans=ans>mp[i]?ans:mp[i];
}
printf("%d\n",ans-1);
}
int main(){
rd(loop);
while(loop--){
rd(n);FOR(i,0,n-1)rd(a[i]);
Manacher();
}
return 0;
}
/*
2
3
51 52 51
4
51 52 52 51
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: