题意:

求最长子串使得它有四个相同的回文串SSSS相连组成


枚举中间x

找右边的中间y满足 y-r[y]<=x y<=x+r[x]/2

用个set维护

注意中间只能是#

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
const int N=1e6+;
typedef long long ll;
int n;
char s[N],str[N];
int r[N];
void Manacher(char s[],int n){
int p=,a;
for(int i=;i<=n;i++){
r[i]=i<p?min(p-i+,r[*a-i]):;
while(s[i-r[i]]==s[i+r[i]]) r[i]++;
if(i+r[i]->p) p=i+r[i]-,a=i;
}
}
void iniStr(char str[],char s[]){
for(int i=;i<=n;i++)
s[(i<<)-]='#',s[i<<]=str[i];
s[n<<|]='#';
s[]='@';s[(n<<)+]='$';
}
set<int> Set;
set<int>::iterator it;
struct data{
int v,id;
bool operator <(const data a)const{return v<a.v;}
}a[N];
int ans;
void solve(){
n=n<<|; int p=;
for(int i=;i<=n;i++) if(i&) a[++p].v=i-r[i],a[p].id=i;
sort(a+,a++p);
int now=;
for(int i=;i<=n;i++) if(i&){
while(now<p&&a[now].v<=i) Set.insert(a[now].id),now++;
it=--Set.upper_bound(i+r[i]/);
if(it!=Set.begin()) ans=max(ans,(*it)-i);
}
printf("%d",ans*);
}
int main(){
freopen("in","r",stdin);
scanf("%d%s",&n,str+);
iniStr(str,s);
Manacher(s,n<<|);
solve();
}

BZOJ 2342: [Shoi2011]双倍回文 [Manacher + set]的更多相关文章

  1. bzoj 2342: [Shoi2011]双倍回文 -- manacher

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

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

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

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

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

  4. Manacher || BZOJ 2342: [Shoi2011]双倍回文 || Luogu P4287 [SHOI2011]双倍回文

    题面:[SHOI2011]双倍回文 题解:具体实现时,就是在更新mr时维护前半段是回文串的最长回文串就好了 正确性的话,因为到i时如果i+RL[i]-1<=mr,那么答案肯定在i之前就维护过了: ...

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

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

  6. BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)

    题目大意:略 先建出$PAM$ 因为双倍回文串一定是4的倍数,所以找出$PAM$里所有$dep$能整除4的节点 看这个串是否存在一个回文后缀,长度恰好为它的一半,沿着$pre$链往上跳就行了 暴跳可能 ...

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

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

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

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

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

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

随机推荐

  1. jquery dataTimePicker日历插件(精确到小时)

    效果图:      下载地址:https://github.com/WangChangyao/jquery-dataTimePicker.git <!DOCTYPE html> <h ...

  2. 无序列表li横向排列的间隙问题

    今天在写页面的时候,无意中遇到这样一个问题,就是无序列表li横向排列即做成导航栏时,列表项间有间隙. 如: 将列表项li变成列表块后(即将li标签设置为,display:inline-block后), ...

  3. memcached内存模型

    内存管理 内存结构 把内存划分成不同的slab class仓库 把仓库切分成不同尺寸的小块(chunk),用来存储缓存数据 数据内存分配 首先根据数据的大小找到对应的slab class 找到空闲的c ...

  4. 织梦DedeCms获取当前页面URL地址的调用方法

    织梦内容页如何调用当前页面url?相信很多对织梦感兴趣的朋友都会去考虑这个问题:在文章内容中加入本文链接,除了 保护自己版权外还可以增加网站的外链收录.网上这方面的帖子一搜一大堆,但多数都只能调用相对 ...

  5. 安装Wamp后 Apache无法启动的解决方法

    安装Wamp后 Apache无法启动的解决方法,网上的解决方案可以说是五花八门,有些说了一大推,一点作用都起不到. 其实解决方法只需两步: 1.安装路径不能包含有中文,这个我不知道为什么,总之如果安装 ...

  6. redis常见使用场景下PHP实现

    基于redis字符串string类型的简单缓存实现 <?php //简单字符串缓存 $redis = new \Redis(); $redis->connect('127.0.0.1',6 ...

  7. 机器学习——kNN(1)基本原理

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

  8. Aliase_小白学Python_Day0_前言

    听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...

  9. Android ListView 设置单选

    为 ListView 设置选中状态,需要经过如下几个步骤: 设置 ListView 的 android:choiceMode="singleChoice" 设置 ListView ...

  10. Bundle使用&NSBundle

    之 前在初始化一个类的时候:TestViewController *viewcontroller=[[TestViewController alloc]initWithNibName:@"T ...