hdu4513吉哥系列故事——完美队形II 马拉车
题意:求最长回文串长度,要求回文串左边是非下降。
思路一:
先把连续的回文串,满足先上升再下降的序列处理出来,再对这部分序列做马拉车模板就可以了。
需要注意的是,由于他要的是非下降的序列,所以要注意等于的情况。
还需要注意的是,写马拉车的板子习惯用的是char。。但是char的上限是255,'0'+250会爆char。因为这个wa了好几天也没想出bug是什么。
思路二:
对马拉车算法进行修改,只要在判断回文的时候加入递增这个条件即可。
两个思路都实现了一遍。
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int s[maxn<<],ne[maxn<<];
int p[maxn<<],mx,maxx,n,T,a[maxn<<],b[maxn],cnt; int init(int b[],int len){
int j=;
ne[]='$',ne[]='#';
for(int i=;i<=len;i++)
{
ne[j++]=(''+b[i]);
ne[j++]='#';
}
ne[j]='\0';
return j;
}
void Manacher(int b[],int len)
{
if(len==)return;
len=init(b,len);
int id,ma=;
for(int i=;i<len;i++)
{
if(i<ma){
p[i]=min(p[*id-i],ma-i);
}else p[i]=;
while(ne[i-p[i]]==ne[i+p[i]])p[i]++;
maxx=max(maxx,p[i]);
if(i+p[i]>ma){
ma=i+p[i];
id=i;
}
}
}
int main(){
// printf("%d %d %d\n",'#','$','\0');
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
cnt=,maxx=;
int flag=;
for(int i=;i<=n;i++)
{
if(a[i]>=a[i-]&&flag==){
b[++cnt]=a[i];
}else if(a[i]<=a[i-]){
flag=;
b[++cnt]=a[i];
}else{
Manacher(b,cnt);
cnt=flag=;
int j=i-;
while(a[j]<=a[j+]){
if(j==)break;
b[++cnt]=a[j];
j--;
}
b[++cnt]=a[i];
}
}
Manacher(b,cnt);
printf("%d\n",maxx-);
}
}
#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int s[maxn<<],ne[maxn<<];
int p[maxn<<],mx,maxx,n,T,a[maxn<<],b[maxn<<],cnt;
int init(){
int j=;
ne[]=-;
ne[]=;
for(int i=;i<=n;i++)
{
ne[j++]=a[i];
ne[j++]=;
}
ne[j]=-;
//printf("j:%d n:%d\n",j,n);
return j;
}
int Manacher(){
int len=init();
int id,ma=,mx=;
//printf("len:%d\n",len);
for(int i=;i<len;i++)
{
if(i<ma){
p[i]=min(p[*id-i],ma-i);
}else p[i]=;
int k=ne[i];
while(ne[i-p[i]]==ne[i+p[i]]&&(ne[i-p[i]]==||ne[i-p[i]]<=k)){
if(ne[i-p[i]]!=)k=ne[i-p[i]];
p[i]++;
}
if(i+p[i]>ma){
ma=i+p[i];
id=i;
}
mx=max(mx,p[i]);
// printf("i:%d mx:%d\n",i,mx);
}
return mx-;
}
int main(){
cin>>T;
while(T--)
{
cin>>n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
maxx=Manacher();
cout<<maxx<<endl;
}
}
hdu4513吉哥系列故事——完美队形II 马拉车的更多相关文章
- HDU4513 吉哥系列故事——完美队形II Manacher算法
题目链接:https://vjudge.net/problem/HDU-4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- HDU4513吉哥系列故事――完美队形II(manacher算法)
这个比最长回文子串就多了一个条件,就是回文字串(这里相当于人的高度)由两端向中间递增. 才刚刚看了看manacher,在用模板A了一道题后,还没有完全理解manacher,然后就准备把这道题也直接带模 ...
- HDU4513:吉哥系列故事——完美队形II(Manacher)
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- 吉哥系列故事——完美队形II(hdu4513+Manacher)
吉哥系列故事--完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) T ...
- HDU 4513 吉哥系列故事——完美队形II manacher
吉哥系列故事——完美队形II Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希 ...
- (回文串 Manacher)吉哥系列故事——完美队形II -- hdu -- 4513
http://acm.hdu.edu.cn/showproblem.php?pid=4513 吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) ...
- hdu 4513 吉哥系列故事——完美队形II (manachar算法)
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) P ...
- hdu-4513吉哥系列故事——完美队形II--最长回文
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
随机推荐
- SpringBoot15 sell02 订单模块
1 订单模块 1.1 MySQL数据表 订单模块涉及到两个数据表: 订单表:主要存储订单相关的基本信息 DROP TABLE IF EXISTS `order_master`; CREATE TABL ...
- SQL 数据库 学习 002 如何启动 SQL Server 软件
如何启动 SQL Server 软件 我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Express 如果你还没有下载 SQL Serv ...
- Debian上SCST的设置
一)创建SCST,无infiniband支持 1:载入最小化支持 #aptitude install build-essentials linux-headers checkinstall #wget ...
- sencha:日期选择组件datepicker
来源于<sencha touch权威指南> ------------------------------- 除app.js外,其它内容都与上一篇博客里的内容相同.app.js代码如下: E ...
- 半平面交 (poj 1279(第一道半平面NlogN)完整注释 )
半平面交的O(nlogn)算法(转载) 求n个半平面的交有三种做法: 第一种就是用每个平面去切割已有的凸多边形,复杂度O(n^2). 第二种就是传说中的分治算法.将n个半平面分成两个部分,分别求完交之 ...
- Requests接口测试(五)
使用python+requests编写接口测试用例 好了,有了前几章的的基础,写下来我把前面的基础整合一下,来一个实际的接口测试练习吧. 接口测试流程 1.拿到接口的URL地址 2.查看接口是用什么方 ...
- 常用SQL性能统计代码
1 BEGIN DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=> 'TELEDB', TABNAME=> 'WFGTEST', PARTNAME=> N ...
- mac 地址查询
mac 地址由 6个字节(48bit)组成.前3个字节是厂商代码.输入厂商名称可查询相应的代码. http://standards.ieee.org/develop/regauth/oui/publi ...
- WPF 控件库——仿制Chrome的ColorPicker
WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...
- rsync 备份服务搭建(完成)
rsync服务守护进程 服务器端配置过程: 1. 检查rsync是否安装: rpm -qa rsync 2.添加rsync服务的用户,管理本地目录 useradd-s /sbin/nologin -M ...