数据结构实验之串三
来源:互联网 发布:免费网络课程网站 编辑:程序博客网 时间:2024/05/22 01:50
数据结构实验之串三:
KMP应用 有n个小朋友,每个小朋友手里有一些糖块,现在这些小朋友排成一排,编号是由1到n。现在给出m个数,能不能唯一的确定一对值l和r(l <= r),使得这m个数刚好是第l个小朋友到第r个小朋友手里的糖块数?
Input
首先输入一个整数n,代表有n个小朋友。下一行输入n个数,分别代表每个小朋友手里糖的数量。 之后再输入一个整数m,代表下面有m个数。下一行输入这m个数。
Output
如果能唯一的确定一对l,r的值,那么输出这两个值,否则输出-1
#include<stdio.h>int a[100000010],b[100000010];int next[100000010],n,m;void Next(){int j;next[0]=-1;for( j=1;j<m;j++){int i=next[j-1];while(b[j]!=b[i+1]&&i>=0){i=next[i];}if(b[j]==b[i+1])next[j]=i+1;elsenext[j]=-1;}}int KMP(int a[],int b[]){Next();int p=0,s=0;while(p<m&&s<n){if(a[s]==b[p]){s++;p++;}else{if(p==0)s++;elsep=next[p-1]+1;}}if(p<m)return -1;elsereturn s-m+1;}int main(){int i,k,t;while(scanf("%d",&n)!=EOF){for(i=0;i<n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(i=0;i<m;i++)scanf("%d",&b[i]);k=KMP(a,b);if(k!=-1){t=KMP(a+k,b);if(t==-1)printf("%d %d\n",k,k+m-1);elseprintf("-1\n");}elseprintf("-1\n");}return 0;}
阅读全文
0 0
- 数据结构实验之串三
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- Linux Unit5
- Tornado框架03-options和日志
- python 接口自动化测试--代码实现(七)
- 蓝牙-电子血压计
- selenium之模态框处理+检测元素是否多层嵌套
- 数据结构实验之串三
- Tornado框架04-配置文件和路由
- 面向对象
- AngularJS实现存入文本,搜索文本,敏感字符
- AngularJS实现存入文本,搜索,敏感字符
- 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
- SASS入门介绍及安装
- 欢迎使用CSDN-markdown编辑器
- Algorithms(一)