用了近两周的时间,终于把罗神那篇后缀数组应用看完了,题目也写了一遍,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. Eclipse中文乱码解决方案

    Eclipse中文乱码解决方案 1)第一个设置:window>perferences>general>workspace>text file encoding 2)Jsp编码问 ...

  2. Eclipse+Python环境配置

    Eclipse+Pydev 1.安装Eclipse Eclipse可以在它的官方网站Eclipse.org找到并下载,通常我们可以选择适合自己的Eclipse版本,比如Eclipse Classic. ...

  3. zabbix proxy安装配置

    1.下载软件zabbix-2.2.1.tar.gz 1.1解压 tar xvf zabbix-2.2.1.tar.gz 1.2编译安装 cd zabbix-2.2.1./configure --pre ...

  4. php学习【2】

    1:运算符 <?php $x=1; echo 1+1;//算术运算符 echo $x+=5;//赋值运算符 echo "<br/>"; echo $x++; ec ...

  5. tcl之array操作

  6. 虚拟机桥接模式下多台Ubuntu16.04系统互相连接

    1.首先新建一个虚拟机并在该虚拟机上安装Ubuntu16.04系统.为这台虚拟机起名为Ubuntu3. 2.对Ubuntu3进行克隆,为新克隆生成的虚拟机起名为Ubuntu2.(这时我们会发现Ubun ...

  7. 利用python进行坐标提取以及筛选(文件操作的小应用)

    由于目前暂时还未学习到python关于数据处理的模块方面的知识,且刚好最近朋友发来一份坐标数据文件(txt格式),让我帮他对其进行筛选, 因此利用了最近刚学过的python文件处理操作以及以前所学的基 ...

  8. linux学习(3)——vim文本编辑工具

    (三) vi与vim的最大区别就是编辑一个文本vi不显示颜色,vim显示颜色. 安装: yum install -y vim-enhance Vim有三种模式 A:一般模式 上下左右光标 k j h ...

  9. Apache2服务配置ubuntu16.04+django1.11

    话不多说直接上步骤 环境 Ubuntu 16.04 Python 3.5.2 Django 1.11 Apache 2.4 1.Apache2安装 sudo apt-get install apach ...

  10. ubuntu安装wine 和sourceinsght

    ubuntu安装wine: 1.sudo apt-get update 2.sudo apt-get install wine 安装完成后会在当前用户目录的的家目录下生成.wine目录,该目录就是wi ...