HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)
题意:
定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称。
如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度。
思路:
来自官方题解:修正了一些题解错别字(误
先用求回文串的Manacher算法。求出以第i个点为中心的回文串长度。记录到数组p中
要满足题目所要求的内容。须要使得两个相邻的回文串,共享中间的一部分,也就是说。左边的回文串长度的一半,要大于等于共享部分的长度,右边回文串也是一样。 由于我们已经记录下来以第i个点为中心的回文串长度, 那么问题能够转化成,相距x的两个数a[i],a[i+x],满足p[i]/2>=x 而且 p[i+x]/2>=x。要求x尽量大
这能够用一个set维护。一開始集合为空,依次取出p数组中最大的元素。将其下标放入set中,每取出一个元素,在该集合中二分查找比i+p[i]/2小,但最大的元素。更新ans。
然后查找集合中比i-p[i]/2大,但最小的元素,更新ans。
答案就是3*ans
嗯~事实上不用二分暴力扫下也能水过去
/*
* @author FreeWifi_novicer
* language : C++/C
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<queue>
using namespace std;
#define clr( x , y ) memset(x,y,sizeof(x))
#define cls( x ) memset(x,0,sizeof(x))
#define mp make_pair
#define pb push_back
typedef long long lint;
typedef long long ll;
typedef long long LL;
const int maxn = 100000 + 5;
int p[2*maxn];
int s[maxn];
int s1[2*maxn];
int n;
void init(){
cls(s1);
s1[0] = -1;
s1[1] = -2;
int k = 2;
for(int i = 0 ; i < n ; i++){
s1[k++] = s[i];
s1[k++] = -2;
}
}
void manacher(){
int mx = 0 , id = 0;
p[0] = 0;
for(int i = 0 ; i < 2*n+1 ; i++){
if(mx > i) p[i] = min(p[2*id-i] , mx-i);
else p[i] = 1;
while(s1[i-p[i]] == s1[i+p[i]]) p[i]++;
if(mx < p[i]+i){
mx = p[i] + i;
id = i;
}
}
}
int solve(){
int ans = 0;
for(int i = 1; i < n*2 + 1 ; i += 2)
if((p[i] - 1) / 2 > ans){
for(int j = i + p[i] - 1 ; ; j -= 2){
if(p[j] >= j-i){
ans = (j-i) / 2;
break;
}
if((j-i)/2 <= ans) break;
}
}
return 3*ans;
}
int main(){
//freopen("input.txt","r",stdin);
int t; cin >> t ; int kase = 1;
while(t--){
cls(s);cls(p);cls(s1);
cin >> n;
for(int i = 0 ; i < n ; i++){
scanf("%d",s+i);
}
init();
manacher();
printf("Case #%d: %d\n",kase++,solve());
}
return 0;
}
HDU 5371 (2015多校联合训练赛第七场1003)Hotaru's problem(manacher+二分/枚举)的更多相关文章
- HDU 5358(2015多校联合训练赛第六场1006) First One (区间合并+常数优化)
pid=5358">HDU 5358 题意: 求∑i=1n∑j=in(⌊log2S(i,j)⌋+1)∗(i+j). 思路: S(i,j) < 10^10 & ...
- hdu 5361 2015多校联合训练赛#6 最短路
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total ...
- hdu 5381 The sum of gcd 2015多校联合训练赛#8莫队算法
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- hdu 5358 First One 2015多校联合训练赛#6 枚举
First One Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题
I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 ...
- 2015多校联合训练赛hdu 5301 Buildings 2015 Multi-University Training Contest 2 简单题
Buildings Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
- 2015多校联合训练赛 Training Contest 4 1008
构造题: 比赛的时候只想到:前面一样的数,后面 是类似1,2,3,4,5,6....t这 既是:t+1,t+1...,1,2,3,...t t+1的数目 可能 很多, 题解时YY出一个N 然后对N ...
- hdu 5288||2015多校联合第一场1001题
pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...
- HDU 5371(2015多校7)-Hotaru's problem(Manacher算法求回文串)
题目地址:HDU 5371 题意:给你一个具有n个元素的整数序列,问你是否存在这样一个子序列.该子序列分为三部分,第一部分与第三部分同样,第一部分与第二部分对称.假设存在求最长的符合这样的条件的序列. ...
随机推荐
- LVS+keepalived均衡nginx配置
如果单台LVS发生突发情况,例如宕机.发生不可恢复现象,会导致用户无法访问后端所有的应用程序.避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可 ...
- Object-C,文件路径API
犀利吐槽 1.同样都是"文件和目录操作",java中,就用java.util.File一个类,就封装了很多API,而Object-C搞了这么多类和函数.具体原因,有待分析啊. 2. ...
- 配置TL-WVR45G企业路由动态地址
1.打开浏览器,在地址栏输入http://192.168.1.1. 2.输入默认用户名密码:admin,登录. 3.[基本设置]->[lan设置]->[lan设置] ip地址改成:192 ...
- CountDownLatch & CyclicBarrier源代码实现解析
CountDownLatch CountDownLatch同意一条或者多条线程等待直至其他线程完毕以系列的操作的辅助同步器. 用一个指定的count值对CountDownLatch进行初始化. awa ...
- [Python] Slice the data with pandas
For example we have dataframe like this: SPY AAPL IBM GOOG GLD 2017-01-03 222.073914 114.311760 160. ...
- vim基础学习之EX命令
:tabnew -创建新标签 :split(sp)-垂直分割窗口 如果没有打开新的文件,那么会打开原来窗口的文件 :vsplit(vsp)-水平分割窗口 如果没有打开新的文件,那么会打开原来窗口的文件 ...
- thinkphp5项目--企业单车网站(五)
thinkphp5项目--企业单车网站(五) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...
- IOC DI 专题
IoC:Inversion of Control,控制反转DI:Dependency Injection,依赖注入 要理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁?依赖:谁依赖于谁?为什么 ...
- div动态加载页面
div动态加载页面 /* /// method 1 var url="<%=basePath%>/qne.do?p=pessegerCountSet"; $.post( ...
- Concurrent.Thread.js
(function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'functi ...