HDU 5371 Hotaru's problem(manacher算法)

本文介绍了一个算法问题,即寻找给定整数序列中满足特定条件的最长连续子序列。该子序列由三个相等长度的部分组成,首尾部分相同且中间部分与其对称。文章详细解释了解决方案,并提供了使用马拉车算法优化搜索过程的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hotaru's problem

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 4237    Accepted Submission(s): 1386


 

Problem Description

Hotaru Ichijou recently is addicated to math problems. Now she is playing with N-sequence.
Let's define N-sequence, which is composed with three parts and satisfied with the following condition:
1. the first part is the same as the thrid part,
2. the first part and the second part are symmetrical.
for example, the sequence 2,3,4,4,3,2,2,3,4 is a N-sequence, which the first part 2,3,4 is the same as the thrid part 2,3,4, the first part 2,3,4 and the second part 4,3,2 are symmetrical.

Give you n positive intergers, your task is to find the largest continuous sub-sequence, which is N-sequence.

 

 

Input

There are multiple test cases. The first line of input contains an integer T(T<=20), indicating the number of test cases. 

For each test case:

the first line of input contains a positive integer N(1<=N<=100000), the length of a given sequence

the second line includes N non-negative integers ,each interger is no larger than 109 , descripting a sequence.

 

 

Output

Each case contains only one line. Each line should start with “Case #i: ”,with i implying the case number, followed by a integer, the largest length of N-sequence.

We guarantee that the sum of all answers is less than 800000.

 

 

Sample Input


 

1 10 2 3 4 4 3 2 2 3 4 4

 

 

Sample Output


 

Case #1: 9

 

为了方便找模板。。写个题解。。

题意:给你一个具有n(n<=1e5)个元素的整数序列,问你是否存在这样一个子序列,该子序列从左到右分为长度相等的三部分,第一部分与第三部分相同,第二部分与第一部分对称(例如 234 432 234 ),要求给出形如所述的最长连续子序列。

思路:易知234432 和432234都是回文子序列,即由前一个子序列的后半部分和后一个前半部分相同的两个回文子序列组成。

因此先用马拉车算法O(n)求出每个以 i 为中心和以 i和i+1 为中心的最长回文串长度。然后本题满足条件的只有i和i+1为中心的最长回文串长度,在纸上画画发现x>max&&p[i+x]>=x时符合条件(x=p[i]-1),否则看 --x,直到满足条件或者小于max。最后不要忘了/2*3。

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2e5+10;
const int inf=0x3f3f3f3f;
int n,m,k;
int p[maxn],s[maxn],ans;
void manacher()
{
    int id=0,maxlen=0;
    for(int i=n;i>=0;i--)
    {
        s[i*2+2]=s[i];
        s[i*2+1]=-1;
    }
    s[0]=-2;
    for(int i=2;i<2*n+1;i++)
    {
        if(p[id]+id>i)p[i]=min(p[2*id-i],p[id]+id-i);
        else p[i]=1;
        while(s[i-p[i]]==s[i+p[i]])++p[i];
        if(id+p[id]<i+p[i]) id=i;
        if(maxlen<p[i]) maxlen=p[i];
    }
    //printf("%d\n",maxlen);
}
int main()
{
    int T,cas=1;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        memset(p,0,sizeof(p));
        for(int i=0;i<n;i++) scanf("%d",&s[i]);
        manacher();ans=0;
        /*for(int i=3;i<2*n+1;i+=2)
        printf(" %d",p[i]-1);*/
        for(int i=3;i<2*n;i+=2)
        if(p[i]-1>ans){
            int t=p[i]-1;
            while(t>ans&&p[i+t]<t) t--;
            ans=max(ans,t);
        }
        printf("Case #%d: %d\n",cas++,ans/2*3);
    }
    return 0;
}

 

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
资 源 简 介 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系, 详 情 说 明 独立分量分析(Independent Component Analysis,简称ICA)是近二十年来逐渐发展起来的一种盲信号分离方法。它是一种统计方法,其目的是从由传感器收集到的混合信号中分离相互独立的源信号,使得这些分离出来的源信号之间尽可能独立。它在语音识别、电信和医学信号处理等信号处理方面有着广泛的应用,目前已成为盲信号处理,人工神经网络等研究领域中的一个研究热点。 本文简要的阐述了ICA的发展、应用和现状,详细地论述了ICA的原理及实现过程,系统地介绍了目前几种主要ICA算法以及它们之间的内在联系,在此基础上重点分析了一种快速ICA实现算法一FastICA。物质的非线性荧光谱信号可以看成是由多个相互独立的源信号组合成的混合信号,而这些独立的源信号可以看成是光谱的特征信号。为了更好的了解光谱信号的特征,本文利用独立分量分析的思想和方法,提出了利用FastICA算法提取光谱信号的特征的方案,并进行了详细的仿真实验。 此外,我们还进行了进一步的研究,探索了其他可能的ICA应用领域,如音乐信号处理、图像处理以及金融数据分析等。通过在这些领域中的实验和应用,我们发现ICA在提取信号特征、降噪和信号分离等方面具有广泛的潜力和应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值