算法题解--字符串
文章平均质量分 83
ciociooo
这个作者很懒,什么都没留下…
展开
-
SPOJ LCS --后缀自动机
【题目大意】 两个字符串的最长公共字串长度【代码】/************************ ID:Ciocio LANG:C++ DATE:2014-1-28 TASK:LCS************************/#include #include #include #include #includ原创 2014-01-28 14:01:35 · 860 阅读 · 0 评论 -
SPOJ Substrings --后缀自动机
【题目地址】 点击打开链接【分析】 •这道题首次遇到需要计算每个状态(所代表的子串)在原串中的出现次数,对于点x我们令这个出现次数为x.same(可以理解为有多少串与自己相同)。为了避免重复计算,初始时真节点值为1克隆节点为0。然后沿后缀链接拓扑排序,依拓扑序向前累加x.pre.same+=x.same,即可得到所有节点的same值。 •知道了每原创 2014-01-28 20:48:12 · 739 阅读 · 0 评论 -
SPOJ LCS2 --后缀自动机
【题目大意】 求N(N【分析】 依旧构造第一个串的后缀自动机,用其余字符串与其匹配。 除了记录与当前字符串成功匹配的位置和位数以外,要在每个节点上记录到上一个串为止、在该节点处能够成功匹配的最长位数。并且根据性质,那些被当前已匹配串所包含的串也是可以成功匹配的,所以还需要沿着后缀链接向前实时更新。【代码】/*******原创 2014-01-28 20:15:58 · 745 阅读 · 0 评论 -
SPOJ Lexicographical Substring Search --后缀自动机
【题目地址】点击打开链接【题目大意】给定一个字符串s,每次提问它的第k小子串。 如果某个字符串在s中重复出现,将其看做一个子串。【分析】•我们引入另一个域x.size,表示从x点开始向后遍历得到的子串数,从原点开始沿正向转移边深搜可以得到。其作用与平衡树中的size域相同,在自动机中查找第K大子串的方式可以参照在平衡树中找第K大元素的方法。原创 2014-02-02 15:34:01 · 786 阅读 · 0 评论 -
CodeForces 128B --后缀自动机
【题目地址】点击打开链接【题目大意】给定一个字符串s,每次提问它的第k小子串。 起始位置不同的相同子串看做不同字串。【分析】这道题的做法跟我博客上的上一题差不多。只需要改一个地方:x.sz=x.same+sigma(y.sz) y是x的儿子【代码】/**************************** ID:Ciocio原创 2014-02-02 16:25:21 · 913 阅读 · 0 评论 -
【KpmCup#0 省选模拟赛】题解
【题目地址】【T-1】很明显的差分约束系统,判负环。但是裸的要超时,我们注意到一个负环必定在一个强连通分量中。于是我们先求出SCC,再判负环。只需要判断入队次数大于sqrt(N)即可,虽然这样是有反例的,但大多数数据是能过的。【T-2】斜率优化dp我们可以得到一个dp方程: f[i]=min{f[j]+sigma(b[k]*(i原创 2014-02-20 16:45:11 · 1513 阅读 · 0 评论