数据结构实验之串三:KMP应用
来源:互联网 发布:淘宝店标图片制作 编辑:程序博客网 时间:2024/04/27 15:15
数据结构实验之串三:KMP应用
Time Limit: 1000MS Memory limit: 65536K
题目描述
有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数?
输入
首先输入一个整数n,代表有n个小朋友。(0
输出
如果能唯一的确定一对l,r的值,那么输出这两个值,否则输出-1
示例输入
51 2 3 4 532 3 4
示例输出
2 4
#include <stdio.h>#include <stdlib.h>int a[100000010],b[100000010];int next[100000010];void getnext(int b[], int m){ int i=0; next[0]=-1; int j=-1; while(i<m) { if(j==-1||b[i]==b[j]) { i++; j++; next[i]=j; } else j=next[j]; }}int kmp(int a[], int b[], int m, int n){ int i=0, j=0; getnext(b, m); while(i<n&&j<m) { if(j==-1||a[i]==b[j]) { i++; j++; } else j=next[j]; } if(j>=m) return i; else return -1;}int main(){ int n, m, i; scanf("%d", &n); for(i=0; i<n; i++) scanf("%d", &a[i]); scanf("%d", &m); for(i=0;i<m;i++) scanf("%d", &b[i]); int e = kmp(a, b, m, n); if(e==-1) printf("%d", e); else //注意题目中的唯一 { int t = kmp(a+e, b, m, n);//看是否有重复的子串 if(t==-1) printf("%d %d", e-m+1, e); 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应用
- HTML小结1-编码
- 画家问题(关灯问题)
- 几个STL算法
- HDU----1686
- MySQL快速入门09----查询(1)
- 数据结构实验之串三:KMP应用
- HDU2177——取(2堆)石子游戏(威佐夫博弈)
- ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法
- 什么是共享栈,以及共享栈的代码实现
- Codeforces 701A+701B
- java
- 杂乱
- linux sort 命令详解
- 平均年龄(<cmath> 中 ceil 函数的应用)---- 美团2016研发工程师在线编程题