摘要: 题目链接:http://poj.org/problem?id=3261 求可重叠的至少出现K次的最长公共前缀。 先用后缀数组求出height数组,然后二分答案。 1 //STATUS:C++_AC_47MS_720KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 7 #include<string> 8 #include<algorithm> 9 #in 阅读全文
posted @ 2013-04-19 20:59 zhsl 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1743 题意:给一些数字串,当做韵律,相同的韵律必须满足: 1,最少5个数字长; 2,重复出现的时候,必须相对差值一样,比如{ 1 ,2, 3, 22, 10, 11, 12 },1,2,3与10 11 12是一样的韵律。 3,韵律不可重叠。 先用后缀数组处理,然后对height数组二分答案就好了。 1 //STATUS:C++_AC_266MS_724KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #incl 阅读全文
posted @ 2013-04-19 01:46 zhsl 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 关于后缀数组的资料,可以看NOI2009国家集训队论文罗穗骞 的<后缀数组——处理字符串的有力工具>。/* suffix array 倍增算法 O(n*lgn) build_sa( ,n+1, ) 注意n+1 getHeight( , n) n = 8 ; num[] = { 1, 1, 2, 1, 1, 1, 1, 2, $ }. 注意num数组最后一位值为0,其它位须大于0! rank[] = { 4, 6, 8, 1, 2, 3, 5, 7, 0 }. (rank[0~n-1]为有效值) sa[] = { 8, ... 阅读全文
posted @ 2013-04-19 01:40 zhsl 阅读(283) 评论(2) 推荐(0) 编辑