KMP算法
aozil_yang
这个作者很懒,什么都没留下…
展开
-
HDU 5918 Sequence I (2016长春区域赛, KMP)
大体题意:给你a数组和b 数组和p,问有多少个子序列,aq,a(q+p),a(q+2p).,., 完全等于b 数组。思路:两个数组最大是1e6.又是字符串匹配问题,首先想到kmp算法。这个题目里面b 数组是固定的,直接获得b 的next数组。然后我们划分成p 个a数组,这p 个字符串分别与b 数组进行匹配即可。吐槽:当然还在想万一模板串比查找串的长度小,或者大怎么办原创 2017-02-08 23:26:27 · 465 阅读 · 0 评论 -
玲珑杯 1100 萌萌哒的第五题 (KMP+DP)
题意:给你n 和m ,告诉你一个长度为m 的串,要求你构造一个长度为n 的串,使得长度为n 的串不包含长度为m 的串,求长度为n 的串的数量。思路:两种思路:先倒着想:所有串的数量是26^n.减去包含长度为m 的串的数量即可。令dp[i][j] 表示构造长度为n 的串第i 位,已经得到了长度为m 的串的第j 位的数量。那么枚举第i位的字符是什么,然后原创 2017-03-04 21:11:54 · 480 阅读 · 0 评论 -
LA 3026 && POJ 1961 Period(KMP求前缀的最短循环节)
题意:给定一个长度为n 的字符串s,求它的每个前缀的最短循环节?思路:我们想一下KMP的next 函数。next[i]表示 由S[0],S[1],,,,S[i] 构成的字符串的最大前缀长度 使得前缀等于后缀。那么这个问题就很好办了。假设当前枚举到i 位置了。(目前字符串的长度是i)假设最短循环节是X。那么next[i] 一定是i - X;所以我们只需要判断i 是原创 2017-03-28 22:16:44 · 498 阅读 · 0 评论 -
HDU Cyclic Nacklace (KMP-next数组的利用)
题意:给你一个字符串,问你至少添加多少字符,使得成为一个有周期的字符串。思路:简单利用next 数组。我们算出 这个字符串所有的border, len - border 即为 周期,暴力计算所有周期 计算一个最小添加字符即可。#include #include #include using namespace std;const int maxn = 100000 +原创 2017-07-06 18:04:52 · 376 阅读 · 0 评论