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 ...
随机推荐
- opennebule 创建cdrom数据发送
{","csrftoken":"b9b5026f1a92180b789971ed8e21d28b"}
- 批量添加数据SqlBulkCopy
using System.Data.SqlClient; class Program { static void Main() { string connectionString = GetConne ...
- sklearn scoring . xgboost.train . ---> rsme
http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter 3.3.1. The scoring pa ...
- 使对象可以像数组一样foreach循环,要求属性必须是私有的(写个类实现Iterator接口)
<?php class Test implements Iterator { ,,,,); public function __construct() { } // 重置,将数组内部指针指向第一 ...
- C#将DataTable数据导出到EXCEL的两种方法
1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...
- C++函数后面加throw关键字简记
看代码时候看到fun() throw()的用法,找到一篇blog解释很简单,如下: C++函数后面加关键字throw(something)限制,是对这个函数的异常安全性作出限制. 举例及解释如下: v ...
- JAVA WEB第0课
在这学期内要掌握JAVA WAB高级网站开发的所有知识,并可以实际运用到.每周将花费20小时左右的时间来学习此门课程,每一天,在当天其他课程任务完成后将开始学习该课程,具体时间要看当天 ...
- eclipse启动了tomcat,但是浏览器打不开欢迎页
tomcat在eclipse中启动成功,主页却打不开 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他 ...
- 关于jeecms修改首页进行测试
由于要学习,jeecms的标签使用,那么必须要有一个测试页.关于首页如何使之用之当测试页. 修改的步骤,找到web.xml文件修改 <welcome-file-list> <welc ...
- Oracle累计函数
今天遇到一个客户的报表需求,在shipment的报表中要查看该shipment中的每个PO的采购数量,当前shipment的出货数量以及累计的所有出货数量. 要有累计的出货数,并且是要有顺序的累计出货 ...