数据结构实验之串三:KMP应用 简单应用
来源:互联网 发布:邓肯巅峰数据 编辑:程序博客网 时间:2024/06/05 13:14
有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数?
Input
首先输入一个整数n,代表有n个小朋友。下一行输入n个数,分别代表每个小朋友手里糖的数量。
之后再输入一个整数m,代表下面有m个数。下一行输入这m个数。
Output
如果能唯一的确定一对l,r的值,那么输出这两个值,否则输出-1
Example Input
51 2 3 4 532 3 4
Example Output
2 4
此题有坑! “唯一”!!!
#include <iostream>#include <cstdio>#include <cstring>//using namespace std; 加上这句话,next就会产生歧义...与这里的命名空间有关系,具体我也不懂const int N = 1e6 + 3;int t[N], p[N], next[N];int n, m, r, cnt = 0;void GetNext(){ next[0] = -1; int j = -1; for(int i = 1; i < m; i++) { while(j != -1 && p[i] != p[j + 1]) j = next[j]; if(p[i] == p[j + 1]) j++; next[i] = j; }}void KMP(){ GetNext(); int j = -1; for(int i = 0; i < n; i++) { while(j != -1 && t[i] != p[j + 1]) j = next[j]; if(t[i] == p[j + 1]) j++; if(j == m - 1) //匹配成功后,记录次数,j回退,继续匹配直至匹配完整text { r = i; cnt++; j = next[j]; } }}int main(){ scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &t[i]); scanf("%d", &m); for(int i = 0; i < m; i++) scanf("%d", &p[i]); KMP(); if(cnt == 1) //唯一一对 printf("%d %d", r - m + 2, r + 1); else printf("-1"); return 0;}
阅读全文
0 0
- 数据结构实验之串三:KMP应用 简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- tensorflow: bn层
- 初始测试博客
- Java学习笔记之JDK1.5新特性(三):可变参数
- 批处理bat万能删除文件/夹
- 2017第二届互联网+研修班即将于10月召开啦!
- 数据结构实验之串三:KMP应用 简单应用
- hdu 1972
- 项目中sql insert语句一定要规范写
- 谈谈url重写
- 利用IPMI挂载镜像装系统
- 第二章、SQLServer 工具
- XlsxWriter模块常用方法说明
- Java学习笔记之JDK1.5新特性(四):自动装箱和自动拆箱
- OpenStack Tacker介绍