随笔分类 -  后缀数组/后缀自动机/Manacher

摘要:把所有的字符串连接起来,中间用一个未出现的字符分隔开,题意是求这个串的所有子串(中间不含分隔符)形成的数之和。把这个串加入SAM,对所有子串进行拓扑排序,从前往后统计。记录到达这个节点的路径个数cnt,以及到达这个节点的总和sum。设父节点是u,子节点是vsum[v] = sum[u] * 10 + sum[v] + cnt[v]*j;cnt[v] += cnt[u];ans就是把所有的sum加起来。注意:1.忽略前导零2.子串中不要含分隔符#include #include #include #include using namespace std;const int MAXN = 1001 阅读全文
posted @ 2013-10-02 19:21 冰鸮 阅读(304) 评论(0) 推荐(0)
摘要:不知道错在哪了,求大神指教!!!思路:用manacher求出每个以str[i]为中心轴的回文串的长度,RMQ预处理区间最大值,对于每个查询,二分最大回文串长,判定是否可行。#include #include #include #include using namespace std;const int MAXN = 222222;char str[ MAXN ];int data[ MAXN * 2 ];int p[ MAXN * 2 ];int d[ MAXN * 2 ][30];int n, len;void init(){ int id,MaxL,MaxId; int i; ... 阅读全文
posted @ 2013-08-27 21:25 冰鸮 阅读(421) 评论(0) 推荐(0)
摘要:模板来源:http://www.neroysq.com/?p=76思路:http://blog.sina.com.cn/s/blog_7812e98601012dfv.html题意就是求两个字符串的最长公共子串,串长最大250000。以串A构建一个后缀自动机,用串B来匹配。枚举串B的每一位B[i]即考虑串B中所有以B[i]为结尾的子串,维护的值为以B[i]为末尾能匹配的最大长度tmpL。假设走到B[i]时已经匹配好的串为str,如果当前节点有B[i]这个儿子,直接向下走,++tmpL。如果没有,沿着fail指针向前回退,直到找到一个有B[i]儿子的节点。#include #include #i 阅读全文
posted @ 2013-08-04 21:11 冰鸮 阅读(241) 评论(0) 推荐(0)
摘要:昨天跟后缀自动机死磕了一下午,也没搞明白怎么回事。今天又把网上找到的资料重新看了一遍,顿时觉得一道大闪电从后脑劈过——好像突然有点明白了orz……不过只能说目前勉强明白了后缀自动机是如何构建的,对于它的很多性质和用法,还有待学习。本人弱菜一只,如有错误,欢迎指正~本文只是后缀自动机构建过程的演示图,不负责解释理论部分。如果想看证明或者解释,推荐以下资料:陈立杰课件:http://wenku.baidu.com/view/7afa5828ed630b1c59eeb512.html(这个真没看懂……)构建演示+解释说明http://www.neroysq.com/?p=76http://fanhq 阅读全文
posted @ 2013-08-04 17:36 冰鸮 阅读(2748) 评论(0) 推荐(3)
摘要:没刷过,从各个地方搜刮来的,留底备用HDU 4641HDU 4622HDU 4436HDU 4416HDU 3518codeforces 235Ccodeforces 271Dcodeforces 127DPOJ 1509SPOJ 1811SPOJ 1812SPOJ NSUBSTRSPOJ SUBLEXSPOJ LCSSPOJ LCS2 阅读全文
posted @ 2013-08-04 15:22 冰鸮 阅读(326) 评论(0) 推荐(0)
摘要:原文地址:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html作者:吴hz星期五的时候,在网上看别人的总结看了很久也没有什么收获,不过星期六看了clj原汁原味的论文,终于明白了(网上的总结只写了大致做法,比较难理解).后缀自动机实质上是字母树,记录的字符串是某个字符串s的所有后缀.这里以字符串ACADD为例:这样很浪费空间和时间(实际上都是O(n^2)).但是,注意:这棵字母树的结点虽然多,但大部分结点都只有一个儿子,而且有很多段是一样的.那么,利用公共部分,就可以对空间进行压缩,具体地说,就是把自己连到儿子的边删掉(并把该儿子及其后代删掉) 阅读全文
posted @ 2013-08-03 19:07 冰鸮 阅读(355) 评论(0) 推荐(0)
摘要:模板来源:http://blog.csdn.net/zkfzkfzkfzkfzkfzkfzk/article/details/9669747解法参考:http://blog.csdn.net/dyx404514/article/details/9631787刚学后缀自动机,还是有很多性质不是很了解……目前也就能做个模板题orz 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 #define N 2010 9 #define MAXQ 10010 10 11 struct S... 阅读全文
posted @ 2013-08-03 18:58 冰鸮 阅读(375) 评论(0) 推荐(0)