上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页
摘要: http://www.bianchengla.com/course/ds/practise/problem?id=1387找了半天终于找到一个可以提交的地方。。。题解:任何一个重复子串,都必然是某两个后缀的最长公共前缀。因为,两个后缀的公共前缀,它出现在这两个后缀中,并且起始位置时不同的,所以这个公共前缀必然重复出现两次以上(可重叠)。而任何两个后缀的最长公共前缀为某一段height值中的最小值,所以最大为height值中的最大值(即某个lcp(sa[i],sa[i+1]))。所以只要算出height数组,然后输出最大值就可以了。View Code 1 #include <iostrea 阅读全文
posted @ 2013-02-05 21:11 proverbs 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 题意:求单个子串的不重复子串个数题解:一个字符串中的所有子串都必然是它的后缀的前缀。对于每一个sa[i]后缀,它的起始位置sa[i],那么它最多能得到该后缀长度个子串(n-sa[i]个),而其中有height[i]个是与前一个后缀相同的,所以它能产生的实际后缀个数便是n-sa[i]-height[i]。遍历一次所有的后缀,将它产生的后缀数加起来便是答案。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #i 阅读全文
posted @ 2013-02-05 21:04 proverbs 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 题意:求str1的最长后缀与 str2 的最长前缀。使得 str1+str2 的长度最小,并且字典序最小(str1和str2可以互换)题解:kmp的p数组的含义:p[i]表示以i为结尾的字符串最多和开头匹配的个数。也正是这道题求解的关键、具体做法就是将两个字符串合并处理求一下p数组就好了~ps:合并的时候中间一定要加“分隔符”(比如:#,@之类的~),否则会有惊喜。。。abcbcbca bcbcbc 对拍了半天才发现这个bug。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cs 阅读全文
posted @ 2013-02-05 11:41 proverbs 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题意:在给定的矩形字符串中找一个最小的矩形字符串,使其通过多次平移复制后,覆盖给定的矩形字符串题解:网上的神马求lcm的算法都是不完善的,具体解释见POJ 2185的discuss。。我的做法是把行看成一个整体,列看成一个整体做kmp。能过discuss里的数据,poj也ac了,不知道有没有漏洞。。感觉应该是对的。View Code 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm 阅读全文
posted @ 2013-02-05 11:31 proverbs 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1010思路:DP方程不难想:DP[I]=MIN(DP[J]+(SUM[I]-SUM[J]+I-J-1-L)^2) ,J<I其中DP[I]表示处理到第I个玩具时最少的费用。直接来显然TLE,一维方程一般用斜率优化。先化简下方程:令F[I]=SUM[I]+I,C=1+L,则化为DP[I]=MIN(DP[J]+(F[I]-F[J]-C)^2)以下是用这方法的步骤:1.证明较优决策点对后续状态影响的持续性假设在状态I处,有两个决策点J,K(J<K),且决策K比决策J好,即DP[K]+(F 阅读全文
posted @ 2013-02-01 16:03 proverbs 阅读(2348) 评论(0) 推荐(0) 编辑
摘要: 题意:有N个顶点的树,节点间有权值, 节点分为黑点和白点。 找一条最长路径使得 路径上黑点数量不超过K个。题解:此题是qzc的论文里的题,没看懂qzc写的,后来看的别人的代码才理解了。先引用一下这位神犇的题解:http://hi.baidu.com/fuqbppvrgcbactd/item/14a81a1bdbd9f98888a956b9在以ROOT为根的树上,我们可以这样表示状态:F[ i , j ] 表示它的第 I 个子树中经过的不超过J 个黑点的路径中,最长的一条的长度是多少,这样可以保证 F[ I , J ] 的递增性。要求出F[ I , J ] ,我们只要对所有子树进行一次DFS即可 阅读全文
posted @ 2013-01-21 00:19 proverbs 阅读(3228) 评论(0) 推荐(0) 编辑
摘要: 题意:求树上的距离小于等于K的点对个数题解:树分治论文题。需要者请移步qzc论文~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <cstdlib> 6 7 #define N 200000 8 #define M 400000 9 #define INF 0x3f3f3f3f 10 11 using namespace std; 12 13 int head[N],ne 阅读全文
posted @ 2013-01-20 17:27 proverbs 阅读(902) 评论(0) 推荐(0) 编辑
摘要: 这题真是神题!当然我不是说这题有多神,而是你数组开小了和开大了得分不同,用不同版本的编译器得分不同。。。(数组没有越界的情况下)呜呜。。。至今没有ac。一直83分。。。抑郁了。。。跪求神犇指明错误。。。View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 151000 8 #define M 251000 9 #define IN 阅读全文
posted @ 2013-01-20 11:29 proverbs 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 对于询问dist,树链剖分搞之,把边权转化到点上,然后注意细节就好(我在代码里标出来了,为了这个细节,wa了一屏)对于询问kth,可以先求出两点(x和y)的lca,然后判断第k个数字是在x到lca的路径上还是y到lca的路径上,确定之后,倍增的寻找就好了~View Code 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <cstdio> 6 7 #define N 50000 8 #de 阅读全文
posted @ 2013-01-20 09:53 proverbs 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 以前动态树写过这个题,今天尝试树链剖分解决~模板题,就声明一点,线段树维护的是点权View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 7 #define N 50000 8 #define M 100000 9 #define INF 1e9 10 11 using namespace std; 12 13 int head[N],to[M],next 阅读全文
posted @ 2013-01-18 23:11 proverbs 阅读(850) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页