先把2*n个数字接成一个模式串P,复制两次的P为串T,然后在T上进行KMP找对P匹配的多个终点,然后就是用Polya定理了,需要求逆元。 1 #include 2 #include 3 #include 4 #include 5 #define mod 1000000007 6 using ...
分类:
其他好文 时间:
2014-09-07 00:58:34
阅读次数:
192
kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是根据给定的模式串W1,m,定义一个next函数。next函数包含了模式串本身局部匹配的信息。基本思想假设.....
分类:
其他好文 时间:
2014-09-05 09:59:51
阅读次数:
263
首先需要了解一下BF暴力匹配算法,这个算法为每一个串设置一个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针回到开始后移之前的位置的下一位,模式串指针回到最开始。
对比一下KMP算法,同样是设置两个指针,然后两个指针同时后移,出现不匹配的情况后,主串指针不变,模式串指针回溯一定的距离。具体模式串指针回溯多少,是第一次看KMP算法的人比较难以理解的,其实仔细想想,模式串的前缀和后缀其实也是...
分类:
其他好文 时间:
2014-09-03 11:21:16
阅读次数:
136
删除模式串中出现的字符,如“welcome to asted”,模式串为“aeiou”那么得到的是“wlcm t std”。
#include
#include
using namespace std;
char *re(char *str,char *model)
{
if(str==NULL||model==NULL)
return NULL;
i...
分类:
其他好文 时间:
2014-09-02 12:27:44
阅读次数:
180
题意:
给出一些0和1组成的串 问 是否存在一个串使得将这个串分解成之前给出的模式串有多种方案
思路:
首先画出一个下面的图
那么我们可以发现 两种方案去拼接同一个串 总是会做模式串A的后缀和模式串B的前缀的匹配(绿色部分) 当然也会存在包含(紫色部分) 因此我们就将问题转化成 从两个模式串开始 不停的按照前缀后缀匹配 最后达到两个方案同时在一个点结束 这样的问题
...
分类:
其他好文 时间:
2014-08-30 13:54:49
阅读次数:
176
KMP算法是一种改进的字符串匹配算法。适用于模式串P有循环重复段的情况下。 原理: 主串 S:S1, S2, …, …, …, …, …, …, Si-k+1, …, Si-1, Si 模式串P:(P1, P2, …, Pk-1,) Pk, …, (Pj-k+1, …, Pj-1,) Pj Pj与S...
分类:
其他好文 时间:
2014-08-30 13:49:09
阅读次数:
221
KMP算法是一种改进的字符串匹配算法。适用于模式串P有循环重复段的情况下。原理:主串 S:S1, S2, …, …, …, …, …, …, Si-k+1, …, Si-1, Si模式串P:(P1, P2, …, Pk-1,) Pk, …, (Pj-k+1, …, Pj-1,) PjPj与Si不匹配...
分类:
其他好文 时间:
2014-08-29 17:59:38
阅读次数:
187
题目大意:
给出来n条64base的病毒编码序列。
再给出m条模式串,让你反编码之后求出里面包含多少病毒序列。
思路分析:
很裸的AC自动机了。但是各种恶心。
动态开trie 静态开queue 就会RE。
全部动态开辟就会MLE。
各种姿势之后静态开trie 动态开queue才能AC。
#include
#include
#include
#include
...
分类:
其他好文 时间:
2014-08-27 14:49:28
阅读次数:
232
/*
* KMP 模式匹配算法
*/
#include
#include
using namespace std;
/*
* 计算模式串的next数组
* 模式串既做主串,又做模式串,进行匹配
* 时间复杂度为O(m),m为模式串的长度
*/
void countNext(char* strPattern, int len, int* next)
{
int i = 0, j...
分类:
其他好文 时间:
2014-08-25 17:01:04
阅读次数:
214
KMP是单模匹配算法,主串是S,模式串是P,查找P在S中出现的位置。主要是思想是主串的索引 i 递增,当主串与模式串发生不匹配时,把模式串右移,右移的位数为 j – fail[j] ,对于模式串计算fail函数,这个函数用来表示计算模式串某个位置发生失配时,模式串重新匹配的位置。fail应该指向最后...
分类:
其他好文 时间:
2014-08-22 12:41:16
阅读次数:
244