题意:
     给你两个串,问你第二个串是从第一个串的什么位置开始完全匹配的。。

思路:

      裸的KMP,也是我的第一个KMP,说下对KMP的理解吧,首先对于非优化的方法求匹配,时间复杂度应该是O(n*m) ,而KMP则是O(n + m)(感觉会比这个长点,因为子串是不回溯,但是匹配串回溯了),但不管怎样,比以往的匹配快多了,KMP的关键就是处理匹配串,也就是给那个next数组赋值,得到next数组后,再根据next数组的特殊意思去简化时间复杂度,比如匹配串 1231234 当我们匹配到最后一个数的时候发现失配了,那么我们不用跳到第一个,而是直接跳到第四个位置上(数组从1开始)因为之前有一部分已经重复了而且是可以匹配的,所以我们就直接省事了,不用再去比较,这样子串也不用回溯到原先的起点+1然后在从新跑了,KMP给我的感觉就是记忆化的去匹配。


#include<stdio.h>

int a[1100000];
int b[11000] ,next[11000];void get_next(int m)
{int j ,k;j = 0 ,k = -1;next[0] = -1;while(j < m){if(k == -1 || b[j] == b[k])next[++j] = ++k;else k = next[k];}return ;
}int KMP(int n ,int m)
{int i ,j;j = 0;for(i = 0 ;i < n ;){if(a[i] == b[j]){if(j == m - 1)return i - (m - 1) + 1;i ++ ,j ++;}else{j = next[j];if(j == -1){i ++ ,j = 0;}}}return -1;
}int main ()
{int t ,n ,m ,i;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);for(i = 0 ;i < n ;i ++)scanf("%d" ,&a[i]);for(i = 0 ;i < m ;i ++)scanf("%d" ,&b[i]);get_next(m);printf("%d\n" ,KMP(n ,m));}return 0;
}

hdu1711 KMP模板相关推荐

  1. kuangbin专题16B(kmp模板)

    题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...

  2. HDU 1711 Number Sequence(KMP模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. 1 #include<iostream> 2 #include&l ...

  3. POJ:3461-Oulipo(KMP模板题)

    原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...

  4. 扩展KMP模板(学习)

    学习链接:https://www.luogu.org/problemnew/solution/P5410 一.引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 二.前置知识 kmp的算法 ...

  5. Oulipo(欧力波)(经典kmp模板题) HDU-1686

    题目:Oulipo(欧力波) 中文大意 The French author Georges Perec (1936�C1982) once wrote a book, La disparition, ...

  6. POJ Oulipo(KMP模板题)

    题意:找出模板在文本串中出现的次数 思路:KMP模板题 #include<cstdio> #include<cstring> #include<cmath> #in ...

  7. Codeforce-126B:Password(KMP模板题)

    题目链接:点击打开链接 题目大意: 给你一个串,让你求这个串的一个同时是前缀,后缀(这个说法好像不太对)且在串中出现过的最长子串. 举个例子: 对于串 fixprefixsdfix 就应该输出fix. ...

  8. hdu1711(kmp纯模板)

    View Code void get_next() { int i=-1,j=0; next[0]=-1; while(j<m-1) { if(i==-1||b[i]==b[j]) { ++i; ...

  9. KMP 模板题 及next数组

    每天都在憧憬这些算法我都懂了的那一天...然鹅,KMP又看了一遍还是觉得稀里糊涂的.先放个模板题好了(:′⌒`) [hdu1711] Number Sequence Time Limit: 10000 ...

最新文章

  1. c语言 自动包含头文件,C语言不要重复包含.h头文件和.c文件
  2. redhat7.4启动telnet和SSH服务,修改IP地址
  3. UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
  4. Android NDK 学习汇总
  5. jpa关联映射(一)
  6. (转)iOS里面Frameworks介绍
  7. 心里装着你,思念就很美(我要做一个文艺范儿的程序员)
  8. 有向图的强连通分量,割点与桥
  9. kernel php segfault,php不停报错segfault,求高手帮忙
  10. c4d细分曲面的使用和导出的一些快捷键笔记
  11. Mysql压缩包版的安装教程
  12. 黑马程序员-IT学生解惑真经-想做程序员或者正在迟疑的同学可以看一下,很有帮助的一篇文章
  13. watir学习系列--Watir API介绍
  14. DGA 域名生成算法攻防
  15. R语言读取(加载)txt格式数据为dataframe、按照指定字段(数据列)对dataframe进行升序排序(ascending)、返回行索引的位置向量
  16. ISP 因特网服务提供商
  17. 测评两款升压稳压芯片
  18. 【海码学院】web前端基础入门JavaScript之JavaScript起源和基础语法学习笔记
  19. 嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析)
  20. 韶关python培训班_《韶》字意思读音、组词解释及笔画数 - 新华字典 - 911查询

热门文章

  1. 中国科学院院士梅宏:云计算这十年
  2. Windows service无法删除怎么办?
  3. 分享我的学习记录 svn地址
  4. 发布程序后显示:未能创建类型
  5. linux sudo命令详解
  6. Blend学习资料总结
  7. 使用django的用户帐号登录openfire
  8. 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
  9. 2019.03.21 增删改
  10. ESP系列AT指令开发笔记