摘要: 无非就是横着放与竖着放,状态中用1表示覆盖,0表示未覆盖。 阅读全文
posted @ 2015-09-18 22:32 活在夢裡 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 对于最长公共子串,n*m的递推显然无法通过本题。本题是后缀数组的一个基础应用,字符串的子串可以视作后缀的前缀。我们在两个串间插入一个不在字符集的字符如'#'作为连接,这样做的目的是为了防止两个后缀的最长公共前缀跨过第一个字符串的末尾。扫描Height数组,如果排名为i的字符串与排名为i-1的字符串来... 阅读全文
posted @ 2015-09-18 22:00 活在夢裡 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 原问题,其实是找最长的相似子串,所谓相似就是一个子串每个值加上一个偏移值可以得到另一个子串。我们先求原数组的差值数组,对新数组求后缀数组,二分答案,判定是否有某个Height数组中的sa最小值与最大值之差大于当前枚举的子串长度。#include #include #include #include ... 阅读全文
posted @ 2015-09-18 21:52 活在夢裡 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 在掌握POJ 2774(两个串求最长公共子串)以及对Height数组分组后,本题还是容易想出思路的。首先用字符集外的不同字符连接所有串,这是为了防止两个后缀在比较时超过某个字符串的分界。二分子串的长度,扫描height数组,判定是否有某个分组来源与至少K个原字符串(本题要求出现超过n的一半次)。#i... 阅读全文
posted @ 2015-09-18 21:47 活在夢裡 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 题意就是给一列数字,求最长的一个子串,并且满足子串在原数串中出现至少K次,子串可以重叠。解法是将问题转为判定性问题,二分子串的长度,判定是否满足重复至少K次。判定方法是经典的根据子串长度将Height数组分组,看某一分组是否至少含有K个元素。 1 #include 2 #include 3 #i... 阅读全文
posted @ 2015-09-18 21:33 活在夢裡 阅读(283) 评论(0) 推荐(0) 编辑