数据结构实验之串三:KMP应用
2017-10-18 17:12
471 查看
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
5 1 2 3 4 5 3 2 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 1 typedef 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; }
相关文章推荐
- 数据结构实验之串一:KMP简单应用
- sdut 3311 数据结构实验之串三:KMP应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- SDUTACM 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串一:KMP简单应用
- sdutacm-数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串一:KMP简单应用
- 3311-数据结构实验之串三:KMP应用
- SDUT 2772 数据结构实验之串一:KMP简单应用
- KMP算法 --数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用 (sdut oj2772)
- 数据结构实验之串一:KMP简单应用