【距离GDOI:137天】 扩展KMP...字符串QAQ
上次和黄神两人一合计,干脆我学字符串他学图论,然后两人相互教...但以蒟蒻最近这状态来看,估计会到时候也教不了QAQ
扩展KMP大概是下面这个课件讲的这样
http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html
然后需要注意的是初始化问题:
对于next数组,根据定义next[0]=len ,而因为k<>0,否则next[i]=next[i-k]不成立...所以next[1]也要预处理出来,才能继续求出剩余的next
对于extend数组,还是要预处理出ex[0],理由同上。暴力预处理即可...
然后是P党的ansistring问题,有人说这东西会慢,而且不方便调试,蒟蒻干脆改成了char数组去模拟,还可以自己定义起点从0还是从1,我的代码是从0开始的,因为从1开始总是各种跪...估计是各种加加减减没处理好,干脆改成0了...反正以后滚去C++也是从0开始的...
然后就是课件里面讲的那样了..
主体代码如下...嗯有些变量名可能没声明...也没主程序...
const maxn=;
type
extype=array[..maxn] of longint;
strtype=array[..maxn] of char;
var
ex0,ex1:extype;
s1,s2:strtype;
next,sum:array[..maxn] of longint; procedure makenext(t:strtype;len:longint);
var p,i,k:longint;
begin
k:=;
next[]:=len;
while (k+<len) and (t[k]=t[k+]) do inc(k);
next[]:=k;
k:=; i:=;
while i<len do
begin
p:=k+next[k]-;
next[i]:=min(next[i-k],max(p-i+,));
while (i+next[i]<len) and (t[next[i]]=t[i+next[i]]) do inc(next[i]);
if i+next[i]>k+next[k] then k:=i;
inc(i);
end;
end; procedure makeext(t,s:strtype;var ex:extype;len:longint);
var p,i,k:longint;
begin
makenext(t,len);
k:=;
while (k<len) and (s[k]=t[k]) do inc(k);
ex[]:=k;
k:=; i:=;
while i<len do
begin
p:=k+ex[k]-;
ex[i]:=min(next[i-k],max(p-i+,));
while (i+ex[i]<len) and (t[ex[i]]=s[i+ex[i]]) do inc(ex[i]);
if i+ex[i]>k+ex[k] then k:=i;
inc(i);
end;
end;
【距离GDOI:137天】 扩展KMP...字符串QAQ的更多相关文章
- hdu6153 扩展kmp求一个字符串的后缀在另一个字符串出现的次数。
/** 题目:hdu6153 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意:给定两个串,求其中一个串t的每个后缀在另一个串s中出现的次数乘以 ...
- kuangbin专题十六 KMP&&扩展KMP HDU2609 How many (最小字符串表示法)
Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me How man ...
- 51Nod - 1304 :字符串的相似度 (裸的扩展KMP)
我们定义2个字符串的相似度等于两个串的相同前缀的长度.例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 "aaab& ...
- 字符串KMP——用途广泛的字符串匹配算法 + 扩展KMP——特殊定义的字符串匹配
引 入 引入 引入 " SY 和 WYX 在看毛片.(几 毛 钱买到的动作 片,毛 片) WYX 突然想回味一个片段,但是只记得台词里面有一句挺长的 " ∗ ∗ ∗ ∗ **** ...
- 字符串(扩展KMP):HDU 4333 Revolving Digits
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- KMP && Manacher && 扩展KMP整理
KMP算法: kmp示例代码: void cal_next(char *str, int *next, int len) { next[0] = -1;//next[0]初始化为-1,-1表示不存在相 ...
- hdu4333 Revolving Digits(扩展kmp)
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)
时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相同长度的字 ...
- 扩展KMP笔记
KMP能计算一个字符串的每个位置前最长公共前缀后缀 扩展KMP可以用来计算两个字符串间的最长公共前缀后缀的…… 不过为了计算这个需要绕些弯路 已知字符串$S$和$P$,$S$的长度为$n$,$P$的长 ...
随机推荐
- centos 通用开发工具及库安装 有了它不用愁了
通用开发工具及库:# yum groupinstall "Development Tools" "Development Libraries"
- day1总结
print("hello world") name='王维是傻屌' print(name) age_of_王维是傻屌 = 18 # type:用于判断变量的类型 str1 ='he ...
- Andrew NG 自动化所演讲(20140707):DeepLearning Overview and Trends
出处 以下内容转载于 网友 Fiona Duan,感谢作者分享 (原作的图片显示有问题,所以我从别处找了一些附上,小伙伴们可以看看).最近越来越觉得人工智能,深度学习是一个很好的发展方向,应该也是未来 ...
- GPU并行编程:内核及函数的实现
原文链接 回想一下我们之前在设备上使用“kernelFunction<<<1,1>>>(..)”执行一个函数的代码,我在那里还曾说过后面会细说,本文就详细介绍一下参 ...
- 面向对象编程 -------JavaScrip
本文摘要:http://www.liaoxuefeng.com/ 一定明白面向对象的两个基本概念: 类:类是对象的类型模板,例如,定义Student类来表示学生,类本身是一种类型,Student表示学 ...
- React报错 :browserHistory doesn't exist in react-router
由于版本问题,React中history不可用 import { hashHistory } from 'react-router' 首先应该导入react-router-dom包: import { ...
- MySQL基础 - 1 数据库基础
一.数据库基础 1.什么是数据库 1.数据库(database)是保存有组织的数据的容器( 通常是一个文件或一组文件 ) 2.数据库是一个以某种有组织的方式存储的数据集合 注意:数据库软件应该称为DB ...
- 【WordPress】CentOS 6.10 测试WP发送邮件失败
1.错误信息如下: SMTP -> ERROR: Failed to connect to server: Permission denied (13) 2.解决方法: https://gist ...
- 为什么要用枚举实现Singleton--Java
原文地址:http://www.cnblogs.com/AprilCal/p/5426007.html 理由一:无需再考虑可序列化的情况 <effective java>第77条:对于 ...
- idea 占用内存优化调整
idea 占用内存优化调整 https://www.cnblogs.com/metoy/p/5967696.html https://blog.csdn.net/zdxxinlang/arti ...