上次和黄神两人一合计,干脆我学字符串他学图论,然后两人相互教...但以蒟蒻最近这状态来看,估计会到时候也教不了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的更多相关文章

  1. hdu6153 扩展kmp求一个字符串的后缀在另一个字符串出现的次数。

    /** 题目:hdu6153 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意:给定两个串,求其中一个串t的每个后缀在另一个串s中出现的次数乘以 ...

  2. 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 ...

  3. 51Nod - 1304 :字符串的相似度 (裸的扩展KMP)

    我们定义2个字符串的相似度等于两个串的相同前缀的长度.例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 "aaab& ...

  4. 字符串KMP——用途广泛的字符串匹配算法 + 扩展KMP——特殊定义的字符串匹配

    引 入 引入 引入 " SY 和 WYX 在看毛片.(几 毛 钱买到的动作 片,毛 片) WYX 突然想回味一个片段,但是只记得台词里面有一句挺长的 " ∗ ∗ ∗ ∗ **** ...

  5. 字符串(扩展KMP):HDU 4333 Revolving Digits

    Revolving Digits Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. KMP && Manacher && 扩展KMP整理

    KMP算法: kmp示例代码: void cal_next(char *str, int *next, int len) { next[0] = -1;//next[0]初始化为-1,-1表示不存在相 ...

  7. hdu4333 Revolving Digits(扩展kmp)

    Revolving Digits Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)

    时间限制:4000ms 单点时限:4000ms 内存限制:256MB 描述 你知道KMP吗?它是用于判断一个字符串是否是另一个字符串的子串的算法.今天我们想去扩展它. 在信息理论中,在两个相同长度的字 ...

  9. 扩展KMP笔记

    KMP能计算一个字符串的每个位置前最长公共前缀后缀 扩展KMP可以用来计算两个字符串间的最长公共前缀后缀的…… 不过为了计算这个需要绕些弯路 已知字符串$S$和$P$,$S$的长度为$n$,$P$的长 ...

随机推荐

  1. centos 通用开发工具及库安装 有了它不用愁了

    通用开发工具及库:# yum groupinstall "Development Tools" "Development Libraries"

  2. day1总结

    print("hello world") name='王维是傻屌' print(name) age_of_王维是傻屌 = 18 # type:用于判断变量的类型 str1 ='he ...

  3. Andrew NG 自动化所演讲(20140707):DeepLearning Overview and Trends

    出处 以下内容转载于 网友 Fiona Duan,感谢作者分享 (原作的图片显示有问题,所以我从别处找了一些附上,小伙伴们可以看看).最近越来越觉得人工智能,深度学习是一个很好的发展方向,应该也是未来 ...

  4. GPU并行编程:内核及函数的实现

    原文链接 回想一下我们之前在设备上使用“kernelFunction<<<1,1>>>(..)”执行一个函数的代码,我在那里还曾说过后面会细说,本文就详细介绍一下参 ...

  5. 面向对象编程 -------JavaScrip

    本文摘要:http://www.liaoxuefeng.com/ 一定明白面向对象的两个基本概念: 类:类是对象的类型模板,例如,定义Student类来表示学生,类本身是一种类型,Student表示学 ...

  6. React报错 :browserHistory doesn't exist in react-router

    由于版本问题,React中history不可用 import { hashHistory } from 'react-router' 首先应该导入react-router-dom包: import { ...

  7. MySQL基础 - 1 数据库基础

    一.数据库基础 1.什么是数据库 1.数据库(database)是保存有组织的数据的容器( 通常是一个文件或一组文件 ) 2.数据库是一个以某种有组织的方式存储的数据集合 注意:数据库软件应该称为DB ...

  8. 【WordPress】CentOS 6.10 测试WP发送邮件失败

    1.错误信息如下: SMTP -> ERROR: Failed to connect to server: Permission denied (13) 2.解决方法: https://gist ...

  9. 为什么要用枚举实现Singleton--Java

    原文地址:http://www.cnblogs.com/AprilCal/p/5426007.html 理由一:无需再考虑可序列化的情况   <effective java>第77条:对于 ...

  10. idea 占用内存优化调整

      idea 占用内存优化调整 https://www.cnblogs.com/metoy/p/5967696.html   https://blog.csdn.net/zdxxinlang/arti ...