随笔分类 -  kmp

摘要:/* 巧妙地使用fail数组 根据fail数组的定义 fail[i] 有 长度为i的子串最长公共前后缀为fail[i] 比如样例 fail 0 0 1 2 那么我们维护一个ans[i]表示到i位置的时候 前i位置子串的匹配次数 比如 a b a ans[1]=1 ans[2]=1 到ans[3]的时候 发现 a 又出现了一边 说明之前的a子串统计少了 相应的可以根据 fail找到a的位置... 阅读全文
posted @ 2016-05-10 11:47 一入OI深似海 阅读(149) 评论(0) 推荐(0)
摘要:#include #include #include #define maxn 1010 using namespace std; int ans,an[maxn],l1,l2,fail[maxn]; char s1[maxn],s2[maxn]; void kmp_init() { for(int i=2;i<=l2;i++) { int p=fail[... 阅读全文
posted @ 2016-05-09 18:11 一入OI深似海 阅读(153) 评论(0) 推荐(0)
摘要:/* 无奈我改了那么久还是看的题解 首先跑一边kmp 几下ans[p]表示总共匹配到长度p的次数 这些不一定都是恰好到p 所以在处理一下 ans[p]通过处理变成 所有的匹配到长度p的次数 最后答案就是总共匹配到长度p+1的次数 - 总共匹配到长度p的次数 就是恰好匹配到长度p的次数 */ #include #include #include #define maxn 200010 usin... 阅读全文
posted @ 2016-05-09 18:09 一入OI深似海 阅读(292) 评论(0) 推荐(0)