吉哥系列故事——完美队形II---hdu4513(最长回文子串manacher)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4513

题意比最长回文串就多了一个前面的人要比后面的人低这个条件,所以在p[i]++的时候判断一下s[i-p[i]]<=s[i-p[i]+2]就可以了;

用最长回文串算法manacher:套一下模板就可以了;

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N = 2e5+7;

int p[N];
int s[N];
int Manacher(int s[], int n)
{
    int Id=0, mx = 0, ans = 0;
    for(int i=2; i<n; i++)
    {
        if(mx > i)
            p[i] = min(p[Id*2-i], mx-i);
        else
            p[i] = 1;
        while(s[i+p[i]] == s[i-p[i]] && s[i-p[i]]<=s[i-p[i]+2] )///要满足的条件是前面的要小于后面的人所以要这样写;
            p[i]++;
        if(mx < p[i]+i)
        {
            mx = p[i]+i;
            Id = i;
        }
        ans = max(ans, p[i]);
    }
    return ans - 1;
}
int main()
{
    int T, n;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);
        for(int i=0; i<n; i++)
            scanf("%d", &s[i]);
        for(int i=n; i>=0; i--)
        {
            s[i+i+2] = s[i];
            s[i+i+1] = 0;
        }
        s[0] = 1;
        int ans = Manacher(s, 2*n+2);
        printf("%d\n", ans);
    }
return 0;
}

时间: 2024-10-13 00:00:28

吉哥系列故事——完美队形II---hdu4513(最长回文子串manacher)的相关文章

HDU 4513 吉哥系列故事――完美队形II (manacher算法)

吉哥系列故事――完美队形II hdu-4513 Description 吉哥又想出了一个新的完美队形游戏!  假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的:  2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中

HDU 4513 吉哥系列故事——完美队形II manacher求最长回文

题目来源:吉哥系列故事--完美队形II 题意:中文 思路:在manacher算法向两边扩展的时候加判断 保证非严格递减就行了 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100110; int a[maxn<<1]; int b[maxn<<1]; int dp[maxn<<1]; int

吉哥系列故事——完美队形II(hdu4513+Manacher)

吉哥系列故事--完美队形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].吉哥希望从中挑出一些人,

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

吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1012    Accepted Submission(s): 358 Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让

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

hdu4513:http://acm.hdu.edu.cn/showproblem.php?pid=4513 题意:给以一个序列,然后让你求一个最长回文序列的长度,这个序列的从左到最中间那个数是不降的,从中间那里向右边的话是不增的. 题解:用Manacher搞定,直接套模板还不行,还要做一些判断. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm>

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

Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的: 2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个人可以任意: 3.从左到中间那

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

吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1075    Accepted Submission(s): 388 Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让

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

题目链接:[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher V - 吉哥系列故事――完美队形II 题意 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] - h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的: 2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,

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

吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的: 2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个