上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页
摘要: 模板来源: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)
摘要: 给你N的一个排列,求满足:a[i] 2 #include 3 #include 4 #include 5 6 #define LL long long int 7 8 using namespace std; 9 10 const int MAXN = 100100;11 const LL MOD = 100000007;12 13 int N;14 int C[MAXN];15 int num[MAXN];16 int low[MAXN];17 int high[MAXN];18 19 int lowbit( int x )20 {21 return x & ( -x )... 阅读全文
posted @ 2013-08-04 14:41 冰鸮 阅读(211) 评论(0) 推荐(0)
摘要: 一共才100个正方形,将所有正方形左下角和右上角的X坐标和Y坐标离散化,直接枚举新建公园的点的坐标即可。O(n^3)的时间复杂度。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 110; 9 const int INF = 255; 10 11 struct Land 12 { 13 int x, y; 14 int len; 15 int import; 16 }; 17 18 int N, K, M;... 阅读全文
posted @ 2013-08-04 10:12 冰鸮 阅读(279) 评论(0) 推荐(0)
摘要: 一共最多才100000个数,并且数值范围0~100000。树状数组 C[i] 记录数值为 i 的数有多少个。删除时如果Query( a ) - Query( a - 1 ) == 0 则该数不存在。求大于a的第K大数只需要对大于a的数二分查找一下,Query( MAXN ) - Query(a)为大于 a 的数的总个数,如果小于K 则不存在。 1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 const int MAXN = 100010; 9 10 int Q;11 int C[MAX... 阅读全文
posted @ 2013-08-03 20:37 冰鸮 阅读(149) 评论(0) 推荐(0)
摘要: 原文地址:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html作者:吴hz星期五的时候,在网上看别人的总结看了很久也没有什么收获,不过星期六看了clj原汁原味的论文,终于明白了(网上的总结只写了大致做法,比较难理解).后缀自动机实质上是字母树,记录的字符串是某个字符串s的所有后缀.这里以字符串ACADD为例:这样很浪费空间和时间(实际上都是O(n^2)).但是,注意:这棵字母树的结点虽然多,但大部分结点都只有一个儿子,而且有很多段是一样的.那么,利用公共部分,就可以对空间进行压缩,具体地说,就是把自己连到儿子的边删掉(并把该儿子及其后代删掉) 阅读全文
posted @ 2013-08-03 19:07 冰鸮 阅读(356) 评论(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 冰鸮 阅读(376) 评论(0) 推荐(0)
摘要: 将起始点、终点和钥匙统一编号,预处理:1.起始点到所有钥匙+终点的最短路2.所有钥匙之间两两的最短路3.所有钥匙到终点的最短路将起始点和所有钥匙四方向出发设为起点BFS一遍,求出它到任意点任意方向的最短路dp[i][j][k]。(即到点(i,j)且方向为k的最短路),BFS时需要注意:1.UDLR有可能组成死循环2.转向符在墙边并且指向了墙时,无法重新选择方向。例如这个: S...L#E3.只有豆腐块滑动碰到墙停止了之后,才能把这个点的坐标加入队列。在滑动过程中经过的点都不需要加入队列。4.钥匙在墙边的情况。在一次滑动过程中,豆腐块经过K时只有一个方向。但是如果K在墙边,并且滑动方向可以使豆腐 阅读全文
posted @ 2013-08-03 10:55 冰鸮 阅读(409) 评论(0) 推荐(0)
摘要: 记录每个节点的出度,叶子节点出度为0,每删掉一个叶子,度数-1,如果一个节点的出度变成0,那么它变成新的叶子。先把所有叶子放到优先队列中。从左往右遍历给定序列,对于root[i],每次取出叶子中编号最小的那个与root[i]相连,并且--degree[ root[i] ],如果degree[ root[i] ]为0,那么把root[i]放入优先队列。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 const int MAXN = 751... 阅读全文
posted @ 2013-08-02 21:42 冰鸮 阅读(273) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 25 下一页