Manacher || P4555 [国家集训队]最长双回文串 || BZOJ 2565: 最长双回文串
题面:P4555 [国家集训队]最长双回文串
题解:就、就考察马拉车的理解
在原始马拉车的基础上多维护个P[i]、Q[i]数组,分别表示以i结尾最长回文子串的长度和以i开头的最长回文子串的长度
然后就枚举断点,只能选择#作为断点,因为#..#才是一个字符串;第一个和最后一个#不能作为断点,因为答案要求|X|、|Y|都>=1
就维护答案
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define re register
using namespace std;
const int maxn=(1e5)+;
int len,cnt,mr,mid,RL[maxn<<],P[maxn<<],Q[maxn<<],ans=,a,b,toi,j;
char S[maxn<<],O[maxn];
inline void Manacher(){
mr=mid=;
for(re int i=;i<=len;i++){
if(i<mr)RL[i]=min(mr-i,RL[(mid<<)-i]);
else RL[i]=;
while(S[i-RL[i]]==S[i+RL[i]]){
P[i+RL[i]]=max(P[i+RL[i]],(RL[i]<<)+);
Q[i-RL[i]]=max(Q[i-RL[i]],(RL[i]<<)+);
RL[i]++;
}
if(i+RL[i]->mr){
mr=i+RL[i]-;
mid=i;
}
}
return;
}
int main(){
scanf("%s",O);
len=strlen(O);
S[]='$';
S[cnt=]='#';
for(re int i=;i<len;i++){
S[++cnt]=O[i];
S[++cnt]='#';
}
len=cnt;
Manacher();
for(re int i=len;i>=;i--){
P[i]=max(P[i],P[i+]-);
j=len-i+;
Q[j]=max(Q[j],Q[j-]-);
}
toi=len-;
for(re int i=;i<=toi;i++)
if(S[i]=='#'){
a=(P[i]-)>>;b=(Q[i]-)>>;
ans=max(ans,a+b);
}
printf("%d\n",ans);
return ;
}
By:AlenaNuna
Manacher || P4555 [国家集训队]最长双回文串 || BZOJ 2565: 最长双回文串的更多相关文章
- P4555 [国家集训队]最长双回文串
P4555 [国家集训队]最长双回文串 manacher 用manacher在处理时顺便把以某点开头/结尾的最长回文串的长度也处理掉. 然后枚举. #include<iostream> # ...
- 洛谷 P4555 [国家集训队]最长双回文串 解题报告
P4555 [国家集训队]最长双回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为abc,逆序为cba,不相同). 输入长度为\(n\)的串 ...
- 【洛谷】P4555 [国家集训队]最长双回文串
P4555 [国家集训队]最长双回文串 题源:https://www.luogu.com.cn/problem/P4555 原理:Manacher 还真比KMP好理解 解决最长回文串问题 转化为长度为 ...
- 洛谷 P4555 [国家集训队]最长双回文串
链接: P4555 题意: 在字符串 \(S\) 中找出两个相邻非空回文串,并使它们长度之和最大. 分析: 直接使用马拉车算法求出每个点扩展的回文串.如果枚举两个回文串显然会超时,我们考虑切割一个长串 ...
- BZOJ 2565: 最长双回文串 [Manacher]
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1842 Solved: 935[Submit][Status][Discu ...
- bzoj 2565: 最长双回文串 manacher算法
2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...
- bzoj 2565: 最长双回文串
Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入 ...
- 洛谷 P4555 [国家集训队]最长双回文串(Manacher)
题目链接:https://www.luogu.com.cn/problem/P4555 首先明白两个回文串,那么要使两个回文串成立,那么我们只能把$'#'$作为中间节点. 然后我们跑一边Manache ...
- 洛谷P4555 [国家集训队]最长双回文串(manacher 线段树)
题意 题目链接 Sol 我的做法比较naive..首先manacher预处理出以每个位置为中心的回文串的长度.然后枚举一个中间位置,现在要考虑的就是能覆盖到i - 1的回文串中 中心最靠左的,和能覆盖 ...
随机推荐
- legend3---lavarel中使用qq邮箱发送邮件
legend3---lavarel中使用qq邮箱发送邮件 一.总结 一句话总结: 第一步:配置邮箱做服务器,比如qq邮箱,网易163邮箱 第二步:配置lavarel的配置文件 第三部:写邮件发送代码就 ...
- Linux 下ThinkPHP项目出现_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450033aa87c28a760f4.php
在Linux中部署了ThinkPHP项目,访问时却出现了_STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450 ...
- Windows10 家庭版安装 Docker Desktop
开启 Hyper-V 开启后会有提示让重启电脑,重启就 OK :: 创建cmd (echo pushd "%~dp0" echo dir /b %SystemRoot%\servi ...
- 基于DRF的图书增删改查
功能演示 信息展示 添加功能 编辑功能 删除功能 DRF构建后台数据 本例的Model如下 from django.db import models class Publish(models.Mode ...
- webpack bundle中parentJsonpFunction的作用
parentJsonpFunction作用:使异步加载的模块在多个不同的bundle内同步. 假设有多入口文件 bundle1.js: bundl2.js: 在webpack打包后 加载流程: 1.b ...
- IntelliJ IDEA Default Keymap (idea 快捷键)
- Elasticsearch入门(二)
基础概念 Elasticsearch有几个核心概念,从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味着,从索引一个文档 ...
- mysql5.6修改密码并授权所有远程用户可登陆
1.my.ini文件,删除最后一行的"skip-grant-tables 2.执行"use mysql;",使用mysql数据库; 3.执行:update mysql.u ...
- PHP开发一个简单的成绩录入系统
预览界面 源码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 剑指Offer编程题(Java实现)——两个链表的第一个公共结点
题目描述: 输入两个链表,找出它们的第一个公共结点. 思路一: 设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a. ...