数据结构实验之串三:KMP应用
来源:互联网 发布:金税盘重装后数据没了 编辑:程序博客网 时间:2024/06/05 15:22
数据结构实验之串三:KMP应用
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
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
Hint
Author
windream
#include<bits/stdc++.h>using namespace std;int next[1000010];int str1[1000010];int str2[1000010];void get_next(int k){ int i=0; int j=-1; next[0]=-1; while(i<k) { if(j==-1||str2[i]==str2[j]) { i++; j++; next[i]=j; } else { j=next[j]; } }}int kmp(int n,int k,int m){ int i=m; int j=0; get_next(k); while(i<n&&j<k) { if(j==-1||str1[i]==str2[j]) { i++; j++; } else { j=next[j]; } } if(j>=k) { return i-k+1; } else { return -1; }}int main(){ int n; int k; while(cin>>n) { for(int i=0;i<n;i++) { scanf("%d",&str1[i]); } cin>>k; for(int i=0;i<k;i++) { scanf("%d",&str2[i]); } int x=kmp(n,k,0); if(x!=-1) { int y=kmp(n,k,x+k-1); if(y==-1) { printf("%d %d\n",x,x+k-1); } else { printf("-1\n"); } } else { printf("-1\n"); } } return 0;}ps:要确定唯一一个子串
0 0
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- NodeJS调试 -- node-inspector
- 【JUC】JDK1.8源码分析之SynchronousQueue(九)
- iOS狂暴之路---iOS中应用的数据存储方式解析
- 使用指针形参交换两个整数的值
- 数据结构:栈的链式存储结构
- 数据结构实验之串三:KMP应用
- Android 延时器的使用
- DDL、DML、DCL、TCL四种SQL语言对比
- 递推: 给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数
- usaco 2012 Open【Running Laps奶牛赛跑】
- MPAndroidChart 教程:动画 Animations(十)
- 浅谈Base64编码
- Android 百度地图-大量覆盖物管理(只显示屏幕看到的覆盖物)
- c语言程序设计第3章顺序结构知识点