Hotaru's problem

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 2274    Accepted Submission(s): 795

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
 
Author
UESTC
 
Source
 

关于manacher算法,链接:>>manacher<<

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

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

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 100010*2
const int mm=1e9+7;
int P[maxn];
//(p.s. 能够看出。P[i]-1正好是原字符串中回文串的总长度)
int s1[maxn];
int s2[maxn];
int n;
int min( int x, int y )//Wa,没加这个。。。
{
return x < y ? x : y;
} 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]] )
{
P[i]++;
}
if(mx < P[i] + i)
{
mx = P[i] + i;
id = i;
}
}
} void init(int n)
{
int i, j = 2;
s2[0] =-1, s2[1] = -2; for(i=0;i<n;i++)
{
s2[j++] = s1[i];
s2[j++] = -2;
}
s2[j]=-3;
} int main()
{
// printf("%d\n",mm);
int T,ca=1;
scanf("%d",&T);
while(ca<=T)
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&s1[i]);
init(n);
manacher(s2);
int ans=0;
for(int i=1;i<=2*n+1;i+=2)
{
// printf("i=%d\tP=%d\n",i,P[i]); for(int j=P[i]+i-1;j-i>ans;j-=2)
{
if(j-i+1<=P[j])
{
ans=max(ans,j-i);
break;//坑
}
} }
printf("Case #%d: %d\n",ca++,ans/2*3);
}
return 0;
}
/*
2
10
2 3 4 4 3 2 2 3 4 4
7
1 2 3 2 1 2 3
*/

Hotaru&#39;s problem(hdu5371+Manacher)多校7的更多相关文章

  1. HDU 5371 Hotaru&#39;s problem(Manacher算法+贪心)

    manacher算法详见 http://blog.csdn.net/u014664226/article/details/47428293 题意:给一个序列,让求其最大子序列,这个子序列由三段组成, ...

  2. hdu 5371 Hotaru&#39;s problem【manacher】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=5371 题意: 给出一个长度为n的串,要求找出一条最长连续子串.这个子串要满足:1:能够平均分成三段 ...

  3. HDU 5371(2015多校7)-Hotaru&#39;s problem(Manacher算法求回文串)

    题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...

  4. HDU 5371 (2015多校联合训练赛第七场1003)Hotaru&#39;s problem(manacher+二分/枚举)

    pid=5371">HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称. 如今给你一个长为n(n<10^5)的序 ...

  5. hdu5371 Hotaru&#39;s problem

    Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission ...

  6. 【HDOJ 5371】 Hotaru&#39;s problem

    [HDOJ 5371] Hotaru's problem Manacher算法+穷举/set Manacher算法一好文:http://blog.csdn.net/yzl_rex/article/de ...

  7. HDU 5371——Hotaru's problem——————【manacher处理回文】

    Hotaru's problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  8. HDU 5371 Hotaru's problem (Manacher,回文串)

    题意:给一个序列,找出1个连续子序列,将其平分成前,中,后等长的3段子序列,要求[前]和[中]是回文,[中]和[后]是回文.求3段最长为多少?由于平分的关系,所以答案应该是3的倍数. 思路:先Mana ...

  9. hdu5371Hotaru&#39;s problem manacher算法

    //给一个序列.让求其最大子序列 //这个序列由三段组成.第一段和第二段对称,第一段和第三段一样 //manacher算法求得p[i] //枚举第二段的起点和长度,得到结果 #include<c ...

随机推荐

  1. Windows下openssl安装及使用

    配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl. 网址: http://www.activestate.com/activeperl/ 下载后直接 ...

  2. Comparable<T> 和 Comparator<T>

    相同点: Comparable<T> 和 Comparator<T>都是接口 不同点: 两者声明的方法不同.前者是compareTo()方法,后者是compare()方法. C ...

  3. mybatis如何根据mapper接口生成其实现类

    SpringBoot集成mybatis mybatis的statement的解析与加载 mybatis如何根据mapper接口生成其实现类 mybatis的mapper返回map结果集 mybatis ...

  4. blkblock工具1

    http://www.ibm.com/developerworks/cn/linux/l-cn-perf1/ http://blog.chinaunix.net/uid-24774106-id-409 ...

  5. P2P通信原理与实现(C++)

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  6. 第一次ACM赛后总结及感悟

    2014 "嘉杰信息"杯 ACM/ICPC湖南程序设计邀请赛暨第六届湘潭程序设计比赛 赛后总结,尽管已经是大二第二学期了,这却是我的第一次真正的ACM比赛经历,大一尽管说就已经进了 ...

  7. MapReduce实现排序功能

    期间遇到了无法转value的值为int型,我採用try catch解决 str2 2 str1 1 str3 3 str1 4 str4 7 str2 5 str3 9 用的\t隔开,得到结果 str ...

  8. 使用 UITabBar 时,子画面虽然已经占满全屏幕,但在其底部,仍然有点击事件(可以响应UITabBar)

    使用 UITabBar 时,我们长长会遇到这样的问题. 问题:一个使用(或继承)了UITabBar的Aview,为其添加一个子画面Bview时,虽然 Bview的尺寸已经占满了整个手机屏幕,但是,Bv ...

  9. 解决ElasticSearch5.x中@Field注解之IK分词不能用的问题

    一.概述 环境:ElasticSearch版本5.6.3,SpringBoot 2.0.2.RELEASE,索引myIndex 问题描述:使用@Field注解给实体类指定ik分词解析器(ik_smar ...

  10. CMMI管理体系

    帮助企业对软件工程过程进行管理和改进,增强开发与改进能力,从而按时,不超过预算地开发软件. CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模块框架消除了各个模型的不一致性,减少了 ...