[SDUT](3311)数据结构实验之串三:KMP应用 ---KMP(串)
来源:互联网 发布:xap格式软件下载 编辑:程序博客网 时间:2024/06/07 02:00
数据结构实验之串三:KMP应用
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic 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
解题新知:注意唯一确定的一个模式串!
AC代码:
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int next[1000005];int t[1000005];int p[1000005];int m,n;void setNext(){ int j=0; int t=next[0]=-1; while(j<n) { if(t<0||p[j]==p[t]) { j++; t++; next[j]=t; } else t=next[t]; }}void kmp(){ int i=0; int j=0; int flag=0; int l,r; memset(next,0,sizeof(next)); setNext(); while(i<m) { if(j<0||t[i]==p[j]) { i++; j++; } else j=next[j]; if(j==n) { flag++; if(flag>=2) { cout<<-1<<endl; return; } l=i-n+1; r=i; } } if(flag==1) printf("%d %d\n",l,r); else printf("-1\n");}int main(){ scanf("%d",&m); for(int i=0;i<m;i++) cin>>t[i]; scanf("%d",&n); for(int i=0;i<n;i++) cin>>p[i]; setNext(); kmp(); return 0;}
阅读全文
0 0
- SDUT 3311 数据结构实验之串三:KMP应用
- sdut 3311 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用 sdut(oj 3311)
- SDUT 3311 数据结构实验之串三:KMP应用
- [SDUT](3311)数据结构实验之串三:KMP应用 ---KMP(串)
- SDUT数据结构实验之串三:KMP应用
- sdut oj3311 数据结构实验之串三:KMP应用
- <sdut-ACM>数据结构实验之串三:KMP应用
- [SDUT](2772)数据结构实验之串一:KMP简单应用 ---KMP(串)
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- UVALive
- OpenSSL命令详解
- 4招教你“洗白”简历上的致命“污点”!
- Echarts象形图简单示例
- 负载均衡(上)
- [SDUT](3311)数据结构实验之串三:KMP应用 ---KMP(串)
- NYOJ129树的判定
- mui 如何设置只有年份选择器
- IT单词积累
- artDiaLog弹出插件
- Linux第三方库的调用
- mysql优化步骤
- NFS安装实战
- 友元