字符串
文章平均质量分 81
pizzaaaaa
这个作者很懒,什么都没留下…
展开
-
HDU 1403 Longest Common Substring
后缀数组入门题。 注意一下题目中的是'substring',不是subsequence。 题目的数据范围是100000,所以用平常的o(n^2)的算法会TLE。 选择后缀数组来进行操作。 考虑测试用例:banana,cianaic 后缀数组的一个常规操作就是将两个字符串接起来进行操作。 我们可以在两个字符串之间接上'$',那么我们构造出的height数组的最大值就是所求的答案。 那为原创 2014-02-27 21:23:49 · 525 阅读 · 0 评论 -
432 D. Prefixes and Suffixes
简单的后缀数组.原创 2014-11-03 22:16:18 · 426 阅读 · 0 评论 -
477 D. Dreamoon and Binary
好久不写CSDN了,原创 2014-11-02 22:14:17 · 690 阅读 · 0 评论 -
Uva LA 4513 Stammering Aliens(Follow the example, solve by lcp using hash)
#include #include #include using namespace std; const int maxn = 4e4 + 10; const int x = 123; int n,m,pos; unsigned long long H[maxn],xp[maxn]; unsigned long long make_hash[maxn]; int ran[maxn];原创 2014-06-04 21:27:49 · 445 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring
#include #include using namespace std; const int nMax = 111111; int num[nMax]; char s[nMax]; int a[nMax]; int sa[nMax], rank[nMax], height[nMax]; int wa[nMax], wb[nMax], wv[nMax], wd[nMax]; int cmp原创 2014-05-26 17:19:14 · 383 阅读 · 0 评论 -
URAL 1297 Palindrome
一道比较简单的利用后缀数组的题目。(当然,利用其他字符串算法也能做) 思路比较简单,也比较好实现。 记原串为A,将原串倒过来变成A',将这两个字符串接起来,当然中间要加上分隔符。 那么,这时候两个串对应的后缀的最大公共前缀就有可能是回文子串(为什么要加上可能?因为这里面会有两个后缀的前缀是不是对应的问题。)。 #include #include using namespace std; c原创 2014-03-04 19:43:26 · 382 阅读 · 0 评论 -
POJ 3415 Common Substrings
一道很巧妙的后缀数组题。 按照后缀数组的一般思维,我们要求的是两个字符串中长度不小于k的子串长度,所以我们可以将两个字符串通过'$"拼接起来,这样问题就转化成了一个height数组中的关系。 首先,height数组一定要分块,分块之后,我们就要求块中任意一对后缀的公共前缀长度。 一开始自己想的比较简单,想用暴力的方法做过,就弄了一个ST表,每次用O(1)的时间查询一下lcp的值。但是当块比较原创 2014-03-04 08:03:50 · 462 阅读 · 0 评论 -
POJ 3294 Life Forms
D - Life Forms Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3294 Description You may have wondered why most extraterrestria原创 2014-03-01 18:48:59 · 522 阅读 · 0 评论 -
HDU 4622 Reincarnation
据说是SAM的模板题,可是人傻看不懂SAM。。。 大概就这么写写吧。 题目的意思是给你一个字符串,对应每一个字符串,有若干个询问,问你在区间[l,r]中有多少个不同的自序列。 如果只有一个询问的话,我们很好解决,直接遍历一遍height数组就可以解决了。 但现在询问的区间每次都是不相同的,你不可能每次构造一个height数组然后再算,这样亲测是会超时的。。。不过据说写得好也能过的样子。原创 2014-03-01 20:10:28 · 463 阅读 · 0 评论 -
HDU 3518 Boring counting
题目的意思比较简单明了。要求字符串中出现次数不小于两次且相互不重叠的子串个数。 这题又利用到了height数组的分块性质。 我们枚举这样重复出现的子串长度,并利用长度对height数组进行分块,如果height数组中的sa最大值和最小值的差大于等于子串长度的话,那么ans++。 程序比较容易写,注意一下边界。 #include #include using namespace std; c原创 2014-03-01 20:18:53 · 464 阅读 · 0 评论 -
HDU 4436 str2int
str2int Time Limit:3000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4436 Description In this problem, you are given several strings that原创 2014-03-01 18:59:38 · 636 阅读 · 0 评论 -
POJ 3261 Milk Patterns
题目的大致意思是,让你求出现至少k次的并且长度最长的子串,并输出长度。 这题又一次利用了height数组的性质。 我们二分答案。 对应一个答案mid,如果他出现的次数不小于k次,那就代表了对应的height数组中连续的一块大于mid值的长度大于等于k-1。 大体程序如下所示,注意height数组的下标即可。 #include #include using namespace std;原创 2014-02-28 22:17:11 · 433 阅读 · 0 评论 -
POJ 1743 Musical Theme
传说中的楼教主男人必做八题。。。 这题啊。。。凭借我当时对后缀数组的理解,那是肯定做不出来的。。。 要用到二分判定答案以及height数组很重要的一个性质,分块法。 题目抽象一下后就变成了:求一个序列中最长的不重叠子串。 因为是不重叠的,所以不能直接遍历一遍height数组来求最大值。 height数组有着这样的一个性质,我总是把他理解成传递性。如果在区间[l,r)中,height值均大原创 2014-02-27 22:27:48 · 453 阅读 · 0 评论 -
Codeforces Round #263 (Div. 1)
56.Codeforces 461 A. Appleman and Toastman:简单的贪心. 57.Codeforces 461 B. Appleman and Tree 题意:给定一棵包含n个节点的树,这棵树的一些节点(至少一个)被染成黑色,现在可以删除一些边,使得删完边后的每个联通分量中恰好只有一个黑色节点.问满足条件的方案数一共有多少(对1e9+7取mod). 解法:树形原创 2014-11-05 11:05:02 · 534 阅读 · 0 评论