- 博客(7)
- 收藏
- 关注
原创 HDU 3518 Boring counting - 后缀树
(其实这题我卡了一个月会乱说?)基本就是参考之前的这篇文章。稍微多了点东西在里面。另外,貌似我搜到的解题报告大都是用后缀数组的,不知道什么情况。言归正传,建树的过程就不多说了,这里假设已经建立了目标字符串的后缀树。我们知道trie和后缀树是等价的,所以下文将不加区分的使用这两个概念。如果想知道一个字符串中重复字串的个数,只需要把它的所有后缀插入到trie中(包括结束字符
2012-11-24 16:25:32
775
原创 后缀树
我是看这篇博文(Suffix Tree学习笔记)学后缀树的,作者写的很好,而且最后有个很实用的模板。不过最近可能google大姨妈,一直打不开。网上有各种转帖,这里就不转了。如果要学后缀树的话,还是去看原文或者看那个链接比较好。我这里也是对着那篇博文写的,图和例子也来自那篇博文。对于一个字符串str[0,n),只要将str[0,n),str[1,n),str[2,n),str[
2012-11-13 16:17:29
1037
原创 CF 149 div2感想
因为打麻将迟到了半个小时前两题都很简单,不过不知道为什么第二个题直接找最大区间过不了,大概是哪写错了,然后硬排了个序才过。虽然题很简单,但花的时间很长,这也是一贯的毛病了:做一件事时稍微想不下去就去干别的事。等到第三题的时候已经只剩30分钟了。算法很简单,先合并线段,然后将合并后的线段作为图的顶点,SPFA两遍就行了:对于起点(或终点),任意一条合并后的线段到它的最短距离是可以求出来的
2012-11-12 01:43:01
527
原创 HDU 3038 How Many Answers Are Wrong - 并查集
坦白讲,这题如果不是放到并查集这一讲的话,我根本不会想到用的。有前几题的经验,本题就非常简单了:find(t)表示t所在集合的左端点,sum[t]表示t到find(t)这一区间的区间和。为了方便,我统一使用了左闭右开区间,这样直接区间操作的时候直接减就行了。压缩路径的时候对sum进行处理。当然由于find(t)是t的左端点,所以在合并的时候一定要注意标记元素要选择较小的一个。至于出错就
2012-10-31 00:38:12
440
原创 HDU 3047 Zjnu Stadium - 并查集
这个题本质上和3635是一样的,到不如说比那个还简单的多:只要记录每个观众相对于自己所在集合的标记元素的偏移,在压缩路径时注意偏移的累加即可。如果新规则的两个观众已经在同一个集合内(在同一集合表示他们之间有严格的顺序关系),则判断新规则是否和原来的规则兼容((off[a]+x)%300 == off[b]),不兼容则累计错误。同样这道题我也浪费了很长时间,其一是误以为合并到同一集合的观众一定要
2012-10-30 22:32:26
375
原创 HDU 3635 Dragon Balls - 并查集
这个题我做了很长时间,主要是英语没学好。T A B : All the dragon balls which are in the same city with A have been transported to the city the Bth ball in. You can assume that the two cities are different.意思是把A球所在城市的
2012-10-30 13:16:49
397
原创 HDU 2553 N皇后问题 - dancing links
打表是最快的做法。退而求其次,直接搜就行了,注意下减枝即可。用DLX纯粹是为了套模板。皇后问题的行列约束很容易转化成01矩阵的列,但对角约束却比较麻烦,因为可能不必完全满足:比如5*5的棋盘,有5行5列,这些要全部不重不漏的满足,但正对角线却有9条,而且只要不重就行了。反对角线亦然。所以在每一步搜索的过程中,选择约束列的时候,只要选行约束的列和列约束的列就行了(第90行);结束的条件也由稀
2012-10-30 13:00:32
997
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人