好吧 由于我是个蒟蒻 c++不常用 特别是字符串渣成翔……pascal还好说 c++么……表示第一次用C++搞这个哎 ToT 顺便贴一发后缀数组的实现本节主要介绍后缀数组的两种实现方法: 倍增算法和 3 DC3 算法,并对两种算法进行了比较。可能有的读者会认为这两种算法难以理解,即使理解了也难以用程...
分类:
其他好文 时间:
2014-08-10 23:55:01
阅读次数:
446
http://poj.org/problem?id=2774
想用后缀数组的看这里:http://blog.csdn.net/u011026968/article/details/22801015
本文主要讲下怎么hash去找
开始的时候写的是O(n^2 logn)算法 果断超时。。。虽然也用了二分的,,
代码如下:
//hash+二分
#include
#include
#incl...
分类:
其他好文 时间:
2014-08-10 01:47:49
阅读次数:
337
什么是后缀数组后缀树(Suffix tree)是一种数据结构,能快速解决很多关于字符串的问题,缺点是算法复杂难懂且容易出错。而后缀数组、后缀自动机、后缀仙人掌都是后缀树的替代品。后缀数组 Suffix Array 是一个一维数组,它将字符串S的n个后缀从小到大排序后把排好序的后缀的开头位置顺次放入数...
分类:
其他好文 时间:
2014-08-08 18:00:46
阅读次数:
447
题目大意:
给出一个A串和很多个B串,求出A中有多少个子串,是所有的B中没有出现的。
思路分析:
后缀数组的作用很容易的求出来整个串中不同的子串个数。
现在要求的是A中不同的,且在B中没有出现过的。
先把AB 串全部连接,跑一遍suffix array。然后求出有多少个不同的子串。
然后再单独用B 串跑 suffix array。再求出单独在B 中有多少个不同的 子串。...
分类:
其他好文 时间:
2014-08-07 23:16:25
阅读次数:
257
Problem Description刚学完后缀数组求回文串的瑶瑶(tsyao)想到了另一个问题:如果能够对字符串做一些修改,怎么在每次询问时知道以某个字符为中心的最长回文串长度呢?因为瑶瑶整天只知道LOL,当他知道自己省选成绩的时候就天天在LOL,导致现在的她实在是太弱了,根本解决不了这个问题,于...
分类:
其他好文 时间:
2014-08-07 12:33:50
阅读次数:
315
首先要明确一点,当数据规模达到百万时需用O(n)算法如何实现O(n)算法,其实是对原有算法的一种改进后者说是 原有算法+一点小性质=O(n)算法下面我将举几个例子来说明这一点:1.后缀数组中height数组的求法,暴力算法hash+二分 用上height[rank[i]]>=height[rank[...
分类:
其他好文 时间:
2014-08-06 22:08:02
阅读次数:
186
题目大意:
n*m的矩阵中,有多少个子矩阵不是同的。
思路分析:
假设这题题目只是一维的求一个串中有多少个子串是不同的。
那么也就是直接扫描height,然后减去前缀。
现在变成二维,如何降低维度。
知道hash 的作用就是将一个串映射到一个数字。
那我们就将这个矩阵hash,考虑到不同的长度和宽度都会导致不同,
所以就要枚举子矩阵的宽度。
hash [i][j]...
分类:
其他好文 时间:
2014-08-04 17:40:37
阅读次数:
260
题意:将一个字符串切成k块,使得字典序最大的那块最小。
ORZ WJMZBMR,几行题解读了一天才懂。
快速比较两个子串的大小可以利用LCP(最长公共前缀),比较公共前缀的下一个字符的大小就够了。
利用这种思想,首先我们可以预处理所有子串的LCP(后缀数组+记录 O(2nlog(2n))+O(n*n),dp(O(4*n*n)))
然后将这些子串利用LCP按照字典序排序,开始二分答案。...
分类:
其他好文 时间:
2014-08-02 15:38:33
阅读次数:
276
Manacher算法是个解决Palindrome问题的O(n)算法,可以说是个超级算法了,秒杀其他一切Palindrome解决方案,包括复杂的后缀数组。
网上很多解释,这里总结一下思想重点:
1 原字符串的字符间插入新的字符, 如#,方便统一所有的字符中心,比如aa和aba的字符中心不一样的,aa的字符中心可以说是aa,而aba的中心则是b,而插入#之后,aa成#a#a#,其中...
分类:
其他好文 时间:
2014-07-31 03:04:15
阅读次数:
224