题意

记\(s_R\)为\(s\)翻转后的串,求一个串最长的形如\(ss_Rss_R\)的子串长度

题解

这有一个复杂度明显\(O(n)\)的做法,思路来自网上某篇博客

一个双倍回文串肯定当且仅当本身是一个回文串且左右两边都是回文串

所以对于右边的回文串,到它中心\(i\)的时候,\(manacher\)记录的\(maxr\)一定\(>i\)

如果满足这个条件,那就判断\(i\)、\(i\)关于\(mid\)的对称串是否有交点,有交点就说明这是双倍回文串;还要注意不能以字母为中心,因为回文串必须偶数长度

欢迎\(hack\)(

#include <algorithm>
#include <cstdio>
using namespace std; const int N = 1e6 + 10; int n, f[N];
char c[N >> 1], s[N]; int main() {
scanf("%d%s", &n, c + 1);
for(int i = 1; i <= n; i ++) {
s[i * 2 - 1] = '%';
s[i * 2] = c[i];
}
s[n = n * 2 + 1] = '%';
int r = 0, mid = 0, ans = 0;
for(int i = 1; i <= n; i += 2) {
f[i] = i < r ? min(f[mid + mid - i], r - i) : 1;
if(i < r && i - f[i] < mid) {
ans = max(ans, 2 * (i - mid));
}
for(; i - f[i] >= 1 && i + f[i] <= n && s[i - f[i]] == s[i + f[i]]; f[i] ++) ;
if(i + f[i] > r) r = i + f[mid = i];
}
printf("%d\n", ans);
return 0;
}

「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」的更多相关文章

  1. BZOJ 2342 双倍回文(manacher算法)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2342 题意:定义双倍回文串为:串的长度为4的倍数且串的前一半.后一半.串本身均是回文的. ...

  2. 2018.06.30 BZOJ 2342: [Shoi2011]双倍回文(manacher)

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec Memory Limit: 128 MB Description Input 输入分为两行,第一行为一个整数,表示字符串 ...

  3. BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] ...

  4. BZOJ 2342 [Shoi2011]双倍回文(Manacher)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2342 题意:求最长子串使得它有四个相同的回文串SSSS相连组成. 首先跑一边Manach ...

  5. bzoj 2342 [Shoi2011]双倍回文(manacher,set)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题意] 求出形如w wR w wR的最长连续子串. [思路] 用manache ...

  6. 【BZOJ】2342: [Shoi2011]双倍回文(Manacher)

    题目 传送门:QWQ 分析 (sb如我写了发不知道什么东西在洛谷上竟然水了84分 嗯咳 设$ i $为双重回文的中心 如果$ j~i $ 可以被算作答案,只有满足如下两式: $ p[j]+j \geq ...

  7. BZOJ 2342 [Shoi2011]双倍回文(manacher+堆+set)

    题意 N<=500000 题解 维护一个set可以用堆来解决. #include<iostream> #include<cstring> #include<cstd ...

  8. BZOJ 2342 回文串-Manacher

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2342 思路:先跑一遍Manacher求出p[i]为每个位置为中心的回文半径,因为双倍回文串 ...

  9. BZOJ 2342: [Shoi2011]双倍回文 马拉车算法/并查集

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1123  Solved: 408 题目连接 http://w ...

随机推荐

  1. Py修行路 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!

    三元运算 条件判断不能加冒号: a=3 b=5 c=a if a<b else b oct() 转成八进制的简写:16进制 标志:BH为后缀或是0x为前缀hex() 转成16进制 元组 跟列表是 ...

  2. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

  3. MAPREDUCE原理篇2

    mapreduce的shuffle机制 概述: mapreduce中,map阶段处理的数据如何传递给reduce阶段,是mapreduce框架中最关键的一个流程,这个流程就叫shuffle: shuf ...

  4. cmd命令删除文件及文件夹

    rmdir /s/q wenjianming 其中: /s 是代表删除所有子目录跟其中的档案. /q 是不要它在删除档案或目录时,不再问我 Yes or No 的动作.

  5. SPQuery DateTime 类型查询

    使用SPQuery查询时间,默认查询会忽略 时分秒,只检查日期,如果要检查时间,则必须添加 IncludeTimeValue='TRUE' 格式如下: <Where>    <Gt& ...

  6. SQL中对数据截取替换

    REPLACE(要修改字段名,‘被替换的特定字符’,‘替换的字符’) 表结构和插入数据 CREATE DATABASE TEST GO USE TEST GO CREATE TABLE TestTab ...

  7. Nginx配置之基于域名的虚拟主机

    1.配置好DNS解析 大家好,今天我给大家讲解下在Linux系统下DNS服务器的基本架设,正向解析,反向解析,负载均衡,还有从域以及一个服务器两个域或者多个域的情况. 实验环境介绍:1.RHEL5.1 ...

  8. oracle 创建表 外键约束

    create table usertable( id int primary key, username ) not null, birthday date, sex ), address ) ); ...

  9. Linux PulseAudio

    一.简介 Linux的声音系统或许是最无序的子系统部分!作为Server来说,声音无足轻重,无人问津,而作为桌面来说太多的实现方案,各有各的长出和不足,ALSA经过多年的发展,基本统一了Linux声卡 ...

  10. SimpleTag——认识自定义标签

    自定义标签 自定义标签的开发与应用步骤 编写完成标签功能的 Java 类(标签处理器) 编写标签库描述(tld)文件,在tld文件中对自定义中进行描述 在 JSP 页面中导入和使用自定义标签 ①. 创 ...