用了近两周的时间,终于把罗神那篇后缀数组应用看完了,题目也写了一遍,T了无数次...详见前几篇博文...

后缀数组很重要的是那个height数组,可以用来做各种奇奇怪怪的东西...常用方法去是去二分,比较少见的是单调栈维护...明天把切的12道题题型整理归纳后再补在后面吧,有点晚了...明天复习AC自动机去!

预备:最长公共前缀

对于suffix(i)和suffix(j) 假设rank[i]<rank[j] 那么lcp(i,j)=min{height[k]| rank[i]+1<=k<=rank[j]}
一、分组+二分长度:
  1.不可重叠最长重复子串 (poj1743)
    二分长度k,将heigh[i]>=k的分为一组..然后对于这组后缀,我们记录其sa[i]的最大值和最小值,若最大值与最小值之差不小于k,那么长度k成立..
  2.可重叠的 k 次最长重复子串(poj3261)
    同上一道题,二分长度,判断一组的后缀个数不少于k即可..
  3.不小于 k 个字符串中的最长子串(poj3294)
    二分长度,分组。分组中判断k个:将字符串染色,然后用布尔数组判断是否出现在多个字符串即可...
  4.每个字符串至少出现两次且不重叠的最长子串(spoj220)
    依旧二分长度,分组。对于一组后缀,长度为len,我们判断是否满足每一个字符串都有出现两次,且两次出现的sa[i]>=len..所以记录每个串的最小值和最大值即可...
  5.出现或反转后出现在每个字符串中的最长子串(poj1226)
    和1的做法差不多..染色的时候把反转后的字符串染成一样的就行..

二、暴力枚举:
  1.可重叠最长重复子串
    子串出现2次或以上,也就是找到最大的height值即可..
  2.不相同的子串的个数(spoj694,spoj705)
    每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数...然后对于suffix(sa[i]),将产生n-sa[i]+1个前缀,用height数组去重即可..
  3.最长回文子串(ural 1297)
    分长度为奇数和偶数...将原串翻转后扔在后面,中间插一个辨别字符,一般用比所有字符小的字符..
    枚举每个字母作为回文串中心:
      (1)奇数:最长回文串为lcp(i,len-i+1)*2-1
      (2)偶数:最长回文串为lcp(i,len-i+2)*2 (i=1时不成立)
  4.连续重复子串(poj2406)
    枚举k,判断lcp(1,k+1)是否等于n-k...预处理一下达到O(1)查询即可..
  5.最长公共子串(poj2774,ural 1517)
    枚举height[i],判断sa[i],sa[i-1]是否不属于同一个字符串,不属于则height[i]可计入答案..
三、有技巧的枚举、单调栈
   1.重复次数最多的连续重复子串(spoj687 poj3693)
     详见:http://www.cnblogs.com/EC-Ecstasy/p/4172751.html
   2.长度不小于 k 的公共子串的个数 (poj3415)
     单调栈O(n)维护...详见:http://www.cnblogs.com/EC-Ecstasy/p/4174671.html

【距离GDOI:131天】 后缀数组完毕的更多相关文章

  1. 【距离GDOI:136天】 后缀数组中...

    当时后缀数组没有好好学...各种应用都没学,这两天好好补,要把罗神的论文好好研究一遍...其实后缀数组真的好神奇!!特别是那个萌萌的height数组! 今天终于能有两节完整的晚自修了QAQ...明晚还 ...

  2. 【知识总结】后缀数组(Suffix_Array)

    又是一个学了n遍还没学会的算法-- 后缀数组是一种常用的处理字符串问题的数据结构,主要由\(sa\)和\(rank\)两个数组组成.以下给出一些定义: \(str\)表示处理的字符串,长度为\(len ...

  3. BZOJ 4199: [Noi2015]品酒大会 [后缀数组 带权并查集]

    4199: [Noi2015]品酒大会 UOJ:http://uoj.ac/problem/131 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品 ...

  4. POJ3693 Maximum repetition substring [后缀数组 ST表]

    Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9458   Acc ...

  5. hihoCoder 后缀数组 重复旋律

    #1403 : 后缀数组一·重复旋律 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成 ...

  6. 后缀数组:倍增法和DC3的简单理解

    一些定义:设字符串S的长度为n,S[0~n-1]. 子串:设0<=i<=j<=n-1,那么由S的第i到第j个字符组成的串为它的子串S[i,j]. 后缀:设0<=i<=n- ...

  7. hiho一下123周 后缀数组四·重复旋律

    后缀数组四·重复旋律4 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为长度为 N 的数构成的数列.小Hi ...

  8. 后缀数组 & 题目

    后缀数组被称为字符串处理神器,要解决字符串问题,一定要掌握它.(我这里的下标全部都是从1开始) 首先后缀数组要处理出两个数组,一个是sa[],sa[i]表示排名第i为的后缀的起始位置是什么,rank[ ...

  9. 2016暑假多校联合---Substring(后缀数组)

    2016暑假多校联合---Substring Problem Description ?? is practicing his program skill, and now he is given a ...

随机推荐

  1. tree树形

    /**  * tree  * @param menuBeans  * @param pid  * @return  */ public JSON  makeTree(List<MenuBean& ...

  2. 【期望dp 质因数分解】cf1139D. Steps to One

    有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...

  3. 关于对GitHub的使用

    什么是GitHub? GitHub是版本控制和协作的代码托管平台.它可以让你在其他人在任何地方一起工作. 本文主要向您介绍GitHub essentials,如存储库,分支,提交和合并请求.将您创建自 ...

  4. SSO 单点登录总结(PHP)

    本篇文章根据个人理解的知识整理汇总,如有不足之处,请大家多多指正. 单点登录(SSO--Single Sign On)的应用是很普遍的,尤其在大型网站系统中,比如百度,登录百度账号和,再转到百度经验. ...

  5. POJ 3254 状压DP(基础题)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17749   Accepted: 9342 Desc ...

  6. poj 3087 直接模拟

    题意:意思就是,s1,和s2两堆牌,然后先s2一张再s1,最后会出现一个s12序列,例如s1 AHAH S2 HAHA 然后s12为HAAHHAAH,然后前面一部分给s1,后面一部分给s2,然后再重复 ...

  7. 关于SSM框架项目中jsp页面EL表达式使用的一些疑问(一)

    问题 ssm框架整合中,jsp页面中EL表达式所引用的对象“page”可以在controller中使用mav.addObject(“page”,pag )进行添加,如果省略mav.addObject( ...

  8. SVN 的基本用法

    克隆远程库 # svn checkout $URL --username=$userName 显示库信息 # svn info 显示库状态 # svn status 将文件纳入版本管理 # svn a ...

  9. protobuf-2.5.0的下载与安装

    1.下载 Hadoop使用protocol buffer进行通信,需要下载和安装protobuf-2.5.0.tar.gz.由于现在protobuf-2.5.0.tar.gz已经无法在官网https: ...

  10. JVM——九大工具助你玩转Java性能优化

    本文转载自 http://www.importnew.com/12324.html 本文由 ImportNew - 陈 晓舜 翻译自 idrsolutions.欢迎加入翻译小组.转载请参见文章末尾的要 ...