原文: 一步一步写算法(之字符串查找 下篇) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们谈到了KMP算法,但是讲的还不是很详细。今天我们可以把这个问题讲的稍微详细一点。假设在字符串A中寻找字符串B,其中字符串B的长度为n,字符串A...
分类:
编程语言 时间:
2014-12-11 10:23:30
阅读次数:
180
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1686字符串匹配,因此采用了KMP算法。有一点需要注意,请看题目的样例2:T: AZAS: AZAZAZ很明显T和S的前3位匹配,那么接下来呢?我最初设计的程序,T和S的前三位匹配后,T开始与S...
分类:
其他好文 时间:
2014-12-10 19:47:58
阅读次数:
203
1 #include 2 #include 3 using namespace std; 4 #define N 10010 5 #define M 1000010 6 7 char S[M], T[N]; 8 int next[N]; 9 10 void Get_next()11 {12 ...
分类:
编程语言 时间:
2014-12-10 19:41:11
阅读次数:
230
题目大意:给定一个多边形,求对称轴数量
我X 这究竟是怎么想到KMP的……
首先 将边字符化 即找到这个多边形的中心 然后用与中心构成的三角形的边-角-边的方式表示这条边
将边顺时针扫一遍 然后倍增至长度为2n-1 再逆时针扫一遍 逆时针扫的那遍在顺时针那遍中出现的次数就是对称轴数目
用KMP算法就能搞出来 证明自己YY吧
出题人卡精度丧心病狂。。。
#include
#includ...
分类:
编程语言 时间:
2014-12-10 18:09:39
阅读次数:
200
算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。
拓展kmp算法是对KMP算法的扩展,它解决如下问题:
定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0
注意到,如果有一个位置extend[i]=m,则表示T在S中出现,而且是在...
分类:
编程语言 时间:
2014-12-09 23:10:54
阅读次数:
338
Oulipo
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5588 Accepted Submission(s): 2235
Problem Description
The French author Georg...
分类:
其他好文 时间:
2014-12-08 23:09:37
阅读次数:
362
题目链接:http://poj.org/problem?id=2406思路:1.理解Kmp算法的next数组的意义;2.对于字符A[i],i-next[i]等价于在字符串中存在一个长度为i-next[i]的重复子串;3.当 i % (i - next[i]) == 0 等价于字符串由 (i/(i-n...
分类:
其他好文 时间:
2014-12-06 15:21:23
阅读次数:
173
KMP算法最难懂的就是next[]数组的求法。
用一个例子来解释,下面是一个子串的next数组的值,可以看到这个子串的对称程度很高,所以next值都比较大。
位置i
0
1
2
3
4
5
6
7
8
9
10
11
12
13
...
分类:
编程语言 时间:
2014-12-05 22:47:39
阅读次数:
240
我们来看一道题目:hihoCoder #1015 : KMP算法 输入 第一行一个整数N,表示测试数据组数。 接下来的N*2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。 其中N
#include
usi...
分类:
编程语言 时间:
2014-12-04 13:50:52
阅读次数:
178