数据结构实验之串三:KMP应用
来源:互联网 发布:怎样开淘宝服装网店 编辑:程序博客网 时间:2024/05/22 12:59
Problem Description
有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 <stdio.h>#include <string.h>#include <stdlib.h>#define MAXSTRLEN 1000005#define OVERFLOW -2#define ERROR -1#define OK 1typedef int CElemtype;typedef int Statu;typedef struct{ CElemtype *ch; int length;} Hstring;int next[MAXSTRLEN];int n, m;int sum = 0;Statu InitString(Hstring &T); //初始化串Statu StrAssign(Hstring &T, CElemtype str[]); //输入串Statu StrAssign2(Hstring &T, CElemtype str[]); //输入串Statu Getnext(int s[]);Statu Kmp(Hstring T1, Hstring T2, int t);int main(){ int i, k; int s1[MAXSTRLEN], s2[MAXSTRLEN]; Hstring T1, T2; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &s1[i]); scanf("%d", &m); for(i = 0; i < m; i++) scanf("%d", &s2[i]); InitString(T1); InitString(T2); StrAssign(T1, s1); StrAssign2(T2, s2); Getnext(s2); k = Kmp(T1, T2, 0); if(k > 0) { int t = Kmp(T1, T2, k); if(t > 0) printf("-1\n"); else printf("%d %d\n", k, k + T2.length - 1); } else printf("-1\n"); return 0;}Statu InitString(Hstring &T) //初始化串{ T.ch = (CElemtype *)malloc(MAXSTRLEN*sizeof(CElemtype)); if(!T.ch) exit(0); T.length = 0; return OK;}Statu StrAssign(Hstring &T, CElemtype str[]) //输入串{ int i; for(i = 0; i < n; i++) { T.ch[i] = str[i]; T.length++; } return OK;}Statu StrAssign2(Hstring &T, CElemtype str[]) //输入串{ int i; for(i = 0; i < m; i++) { T.ch[i] = str[i]; T.length++; } return OK;}Statu Getnext(int s[]){ int i = 0, j = -1; next[0] = -1; while(i < m) { if(j == -1 || s[i] == s[j]) { i++; j++; next[i] = j; } else j = next[j]; } return OK;}Statu Kmp(Hstring T1, Hstring T2, int t){ int i = t, j = 0; while(i < T1.length && j < T2.length) { if(j == -1 || T1.ch[i] == T2.ch[j]) { i++; j++; } else j = next[j]; } if(j >= T2.length) return i - m + 1; else return ERROR;}
阅读全文
0 0
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- asp.net和js对cookie的相互操作问题
- 深入理解PackageManagerService
- ES6学习之路~~数据结构:set和map
- 手机端选择照片和调用摄像头
- HDU2196-Computer(树形dp)
- 数据结构实验之串三:KMP应用
- 如何在 Linux 虚拟机上扩展根文件系统
- 使用alibaba Druid 对sql 语句进行校验
- 关于对外链建设中裸链和锚链分析
- django错误
- うわさ的一些惯用搭配
- DNS服务器和web服务器配置--自我操作
- 修改DialogFragment的大小和位置
- 客户信息管理系统3—客户信息的增加(二)