shoi题目好坑爹

首先自己测发现这道题如果用后缀数组+rmq处理每个点回文串能延伸长度的话会TLE

(当然我用的是倍增+ST的方法,如果用三分构建后缀数组+笛卡尔树处理rmq我就不知道了);

关于最长回文子串的问题有一个更快的算法叫manacher,实现简单也好理解

这个算法的优点在于它在每两个字符之间插入一个新的字符#,使得所有的回文子串都变成了奇数长度的

具体的介绍:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824

求出以每个字符为中心的回文串最长延伸长度p[i]后(注意p[i]-1就是在原串中以该字符为中心的最长回文子串)

我们下面就要来找双倍回文

首先,穷举中心字符我们肯定是穷举“#”而不穷举字母

不难想到一种O(n2)的做法,先穷举双倍回文的中心,在穷举左半边回文的中心判断是否存在可行解

(事实上,左边穷举的时候我们只要从i-p[i]/2找就可以了

但实际上,随着我们向右穷举双倍回文的中心,左边一些点穷举了一次是肯定是不用再穷举的,

我们可以考虑用并查集优化

 var p,fa:array[..] of longint;
    j,l,n,k,i,ans,right:longint;
    s:array[..] of char;
    ch:char; function min(a,b:longint):longint;
  begin
    if a>b then exit(b) else exit(a);
  end; function max(a,b:longint):longint;
  begin
    if a>b then exit(a) else exit(b);
  end; function getf(x:longint):longint;
  begin
    if x<>fa[x] then fa[x]:=getf(fa[x]);
    exit(fa[x]);
  end; begin
  readln(l);
  s[]:='$';
  s[]:='#';
  for i:= to l do
  begin
    read(ch);
    s[i*]:=ch;
    s[i*+]:='#';
  end;
  n:=*l+;
  k:=;
  right:=;
  for i:= to n do
  begin
    if right>i then
      p[i]:=min(p[*k-i],right-i)
    else p[i]:=;
    while (s[i+p[i]]=s[i-p[i]]) do inc(p[i]);
    if p[i]+i>right then
    begin
      right:=p[i]+i;
      k:=i;
    end;
  end;
  for i:= to n do
    if s[i]='#' then fa[i]:=i else fa[i]:=i+;
  for i:= to n do
  begin
    if i mod = then
    begin
      j:=getf(max(i-p[i] div ,));
      while (j<i) and (j+p[j]-<i) do
      begin
        fa[j]:=getf(j+);
        j:=fa[j];
      end;
      if j<i then ans:=max(ans,(i-j)*);
    end;
  end;
  writeln(ans);
end.

bzoj2342的更多相关文章

  1. BZOJ2342 Manacher + set

    题一:别人介绍的一道题,题意是给出一个序列,我们要求出一段最常的连续子序列,满足:该子序列能够被平分为三段,第一段和第二段形成回文串,第二段和第三段形成回文串. 题二:BZOJ2342和这题非常的相似 ...

  2. 【BZOJ2342】双倍回文(回文树)

    [BZOJ2342]双倍回文(回文树) 题面 BZOJ 题解 构建出回文树之后 在\(fail\)树上进行\(dp\) 如果一个点代表的回文串长度为\(4\)的倍数 并且存在长度为它的一半的回文后缀 ...

  3. BZOJ2342 Shoi2011 双倍回文 【Manacher】

    BZOJ2342 Shoi2011 双倍回文 Description Input 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. Output 输 ...

  4. 【BZOJ2342】双倍回文(manacher,并查集)

    题意: 思路:From http://blog.sina.com.cn/s/blog_8d5d2f04010196bh.html 首先我可以看出: (1)我们找到的串的本身也是一个回文串(显然) (2 ...

  5. bzoj2342还是马拉车

    就好比第一次写主席树的时候写了30行,第二次写了5行 这次马拉车只剩下 ,id=,mx=;i<=n;i++) { -i],mx-i):;a[i-p[i]]==a[i+p[i]+];p[i]++) ...

  6. 【BZOJ-2342】双倍回文 Manacher + 并查集

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1799  Solved: 671[Submit][Statu ...

  7. BZOJ2342: [Shoi2011]双倍回文

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 923  Solved: 317[Submit][Status ...

  8. BZOJ2342[Shoi2011]双倍回文——回文自动机

    题目描述 输入 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. 输出 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文 ...

  9. bzoj千题计划306:bzoj2342: [Shoi2011]双倍回文 (回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2342 解法一: 对原串构建回文自动机 抽离fail树,从根开始dfs 设len[x]表示节点x表示 ...

随机推荐

  1. C#的垃圾回收机制及弱引用

    在上一篇中,讨论了字符串常量的拘留池和不可变性:对于字符串变量,没有这个特性(或其他DotNet的非托管资源),当我们使用完后就要手动回收,即将变量的值指向null(p=null),然而堆内存中,那个 ...

  2. ios UIWebview本地加载H5网页

    注意两点 1.拖动文件到工程中选择create folder,文件夹为蓝色  --不要让文件参与编译,而只是让文件加入进来 2.加载方式pathforresorth   oftype   indire ...

  3. iOS lanchImage 和icon的设置

    1 icon的设置 打开项目中的Assets.xcassets   这里边有一个icon 首先需要有icon 的尺寸 尺寸如下: 29*29   2x 29*29   3x 40*40  2x 40* ...

  4. 原生js的数组除重复

    js对数组的操作在平常的项目中也会遇到,除去一些增加,或者减少的操作外,还有一个比较重要的操作就是数组的除重,通过数组的除重,我们可以将一个数组中存在的多个重复的数组进行清理,只留下不重复的.另外下面 ...

  5. 01_JavaMail_01_邮件服务器简述

    [收发邮件简单流程] 过程大致是: 发邮件时从客户端发邮件发送到邮件服务器,收邮件就是把邮件服务器的邮件下载到客户端. [邮件协议] * SMTP:(Simple Mail Transfer Prot ...

  6. TFTPD32, 3CDaemon, FlashFxp

    TFTPD32, 3CDaemon, FlashFxp ——各种网络传输下载工具简介—— 一.将3CDaemon.exe作为TFTP服务端,开发板作为TFTP客户端 1.如上图所示,设置好3CDaem ...

  7. 操作系统之进程篇(4)--经典进程间通信(IPC)问题

    1. 哲学家进餐问题: 问题描述: 五个哲学家在一个圆桌上进餐,每人的面前放了一盘意大利面,两个盘子之间有一个叉子,但是由于盘子里面的面条十分光滑,需要两个叉子才能进行就餐行为.餐桌的布局如下图所示: ...

  8. 桶排序之python实现源码

    tmp = [] def bucket_sort(old): for i in range(len(old)): tmp.append([]) for i in old: tmp[int( i * l ...

  9. Hibernate的检索策略

    hibernate 的中的session依照load()和get()按照参数的制定OID(ObjctID)去加载一个持久化对象.另外Query.list()方法则按照HQL语句去加载持久化的对象. 以 ...

  10. 微软AJAX解决方案

    -------- 微软AJAX解决方案 (*) --------ASP.Net中内置的简化AJAX开发的控件UpdatePanel 放入ScriptManager,将要实现AJAX效果的控件放到Upd ...