hdu1711 KMP模板
题意:
给你两个串,问你第二个串是从第一个串的什么位置开始完全匹配的。。
思路:
裸的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模板相关推荐
- kuangbin专题16B(kmp模板)
题目链接: https://vjudge.net/contest/70325#problem/B 题意: 输出模式串在主串中出现的次数 思路: kmp模板 在 kmp 函数中匹配成功计数加一, 再令 ...
- HDU 1711 Number Sequence(KMP模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1711 这道题就是一个KMP模板. 1 #include<iostream> 2 #include&l ...
- POJ:3461-Oulipo(KMP模板题)
原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...
- 扩展KMP模板(学习)
学习链接:https://www.luogu.org/problemnew/solution/P5410 一.引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 二.前置知识 kmp的算法 ...
- Oulipo(欧力波)(经典kmp模板题) HDU-1686
题目:Oulipo(欧力波) 中文大意 The French author Georges Perec (1936�C1982) once wrote a book, La disparition, ...
- POJ Oulipo(KMP模板题)
题意:找出模板在文本串中出现的次数 思路:KMP模板题 #include<cstdio> #include<cstring> #include<cmath> #in ...
- Codeforce-126B:Password(KMP模板题)
题目链接:点击打开链接 题目大意: 给你一个串,让你求这个串的一个同时是前缀,后缀(这个说法好像不太对)且在串中出现过的最长子串. 举个例子: 对于串 fixprefixsdfix 就应该输出fix. ...
- 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; ...
- KMP 模板题 及next数组
每天都在憧憬这些算法我都懂了的那一天...然鹅,KMP又看了一遍还是觉得稀里糊涂的.先放个模板题好了(:′⌒`) [hdu1711] Number Sequence Time Limit: 10000 ...
最新文章
- c语言 自动包含头文件,C语言不要重复包含.h头文件和.c文件
- redhat7.4启动telnet和SSH服务,修改IP地址
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
- Android NDK 学习汇总
- jpa关联映射(一)
- (转)iOS里面Frameworks介绍
- 心里装着你,思念就很美(我要做一个文艺范儿的程序员)
- 有向图的强连通分量,割点与桥
- kernel php segfault,php不停报错segfault,求高手帮忙
- c4d细分曲面的使用和导出的一些快捷键笔记
- Mysql压缩包版的安装教程
- 黑马程序员-IT学生解惑真经-想做程序员或者正在迟疑的同学可以看一下,很有帮助的一篇文章
- watir学习系列--Watir API介绍
- DGA 域名生成算法攻防
- R语言读取(加载)txt格式数据为dataframe、按照指定字段(数据列)对dataframe进行升序排序(ascending)、返回行索引的位置向量
- ISP 因特网服务提供商
- 测评两款升压稳压芯片
- 【海码学院】web前端基础入门JavaScript之JavaScript起源和基础语法学习笔记
- 嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析)
- 韶关python培训班_《韶》字意思读音、组词解释及笔画数 - 新华字典 - 911查询