SDUT 3311 数据结构实验之串三:KMP应用
来源:互联网 发布:php prematch 编辑:程序博客网 时间:2024/05/24 00:47
数据结构实验之串三:KMP应用
Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatistic Discuss
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
#include<cstdio>#include<cstring>using namespace std;int father[99999999],son[99999999],next[99999999];void getnext(int *son,int *next,int m){ int j,k; j=0;k=-1; next[0]=-1; while(j<m-1) { if(k==-1||son[j]==son[k]) { j++;k++; next[j]=k; } else k=next[k]; }}int kmp(int *f,int *s,int n,int m){ int i=0,j=0; getnext(s,next,m); while(i<n&&j<m) { if(j==-1||f[i]==s[j]) { i++; j++; } else j=next[j]; } if(j>=m) return (i-m+1); else return -1;}int main(){ int n,m; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%d",&father[i]); scanf("%d",&m); for(int i=0;i<m;i++) scanf("%d",&son[i]); int y=kmp(father,son,n,m); int left,right; if(y!=-1) { int x=kmp(father+y,son,n,m); if(x==-1)//来确模式串在目标串中是唯一的!!! { left=y; right=y+m-1; printf("%d %d\n",left,right); } else printf("-1\n"); } else printf("-1\n"); } return 0;}
阅读全文
0 0
- SDUT 3311 数据结构实验之串三:KMP应用
- sdut 3311 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用 sdut(oj 3311)
- SDUT 3311 数据结构实验之串三:KMP应用
- SDUT数据结构实验之串三:KMP应用
- sdut oj3311 数据结构实验之串三:KMP应用
- <sdut-ACM>数据结构实验之串三:KMP应用
- [SDUT](3311)数据结构实验之串三:KMP应用 ---KMP(串)
- SDUT 2272 数据结构实验之串一:KMP简单应用
- 数据结构实验之串一:KMP简单应用 (sdut oj2772)
- sdut oj2772 数据结构实验之串一:KMP简单应用
- SDUT 2772 数据结构实验之串一:KMP简单应用
- SDUT 2772 数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 【python】练习题:去重排序以及列表推导式
- 欢迎使用CSDN-markdown编辑器
- Gradle Plugin 和 Gradle的版本的需求
- CentOS6
- Catalan数
- SDUT 3311 数据结构实验之串三:KMP应用
- javaweb国际化:使用native2ascii转换中文
- 模拟 [ZJOI2008]杀蚂蚁antbuster
- Reflection2017.10.11
- shell脚本
- 滑雪
- 概念——静态库/动态库
- HDU1575(矩阵快速幂模板题)
- F