sdutacm-数据结构实验之串三:KMP应用
来源:互联网 发布:中国土壤数据库 编辑:程序博客网 时间:2024/06/06 00:50
数据结构实验之串三:KMP应用
TimeLimit: 1000MS Memory Limit: 65536KB
SubmitStatistic
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
5
1 2 3 45
3
2 3 4
Example Output
2 4
Hint
Author
windream
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>using namespace std;int next[2000000],n,m;/*void qnext(int *p,int next[]){ next[0] = -1; int k = -1;//k表示前缀,j表示后缀 int j = 0; while(j <m - 1) { if(k==-1||p[j] == p[k]) { ++j; ++k; if(p[j]!=p[k]) next[j] = k; else //因为不能出现p[j] = p[ next[j ]], //所以当出现 其 时需要继续递归,k = next[k] = next[next[k]] next[j] = next[k]; } else { k = next[k]; } }}int kmp(int *s,int *p){ int i = 0; int j = 0; int slen = strlen(s); int plen = strlen(p); while(i < n&& j<m) { if(j == -1||s[i]== p[j])//j==-1,表明处于一开始,或者完全失配,此时主串下移一位,模式串归零 { i++; j++; } else { j = next[j]; } } if(j == m) return i-j; else return -1;}*/void qnext(int *p,int next[]){ int i,k; next[0] = 0; for(i=1,k=0;p[i];i++) { while(k>0&&p[k]!=p[i])k = next[k-1]; if(p[k]==p[i])k++; next[i] = k; }}int kmp(int *s,int *p){ int i,k; int cnt = 0,temp; for(i=0,k=0;s[i];i++) { while(k>0&&p[k]!=s[i])k = next[k-1]; if(p[k]==s[i])k++; if(k==m){cnt++; if(cnt==1)temp = i-k+1;} } if(cnt==1) return temp; else return -1;}int main(){ int i; int s[2000000],p[2000000]; while(cin>>n) { for(i=0;i<n;i++) { scanf("%d",&s[i]); } cin>>m; for(i=0;i<m;i++) { scanf("%d",&p[i]); } qnext(p,next); int o = kmp(s,p); if(o==-1) cout<<o<<endl; else cout<<o+1<<' '<<o+m<<endl; } return 0;}/***************************************************User name: jk160508孙振强Result: Wrong AnswerTake time: 48msTake Memory: 1148KBSubmit time: 2017-02-07 21:09:43****************************************************//***************************************************User name: jk160505徐红博Result: Wrong AnswerTake time: 168msTake Memory: 2308KBSubmit time: 2017-02-07 22:15:53****************************************************//***************************************************User name: jk160505徐红博Result: AcceptedTake time: 160msTake Memory: 2596KBSubmit time: 2017-02-13 19:51:14****************************************************/
0 0
- SDUTACM 数据结构实验之串三:KMP应用
- sdutacm-数据结构实验之串三:KMP应用
- SDUTACM 数据结构实验之串一:KMP简单应用
- sdutacm-数据结构实验之串一:KMP简单应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 数据结构实验之串三:KMP应用
- 一些很有用很 trick 的命令
- retrofit之content-type浅析
- c语言实现链表的相关的操作
- Django之模型
- 【meta】标签可以模拟一个http响应头
- sdutacm-数据结构实验之串三:KMP应用
- spring循环依赖
- Node.js中,脚本输出显示 -e 方法
- eclipse 配置tomcat编写jsp文件并在网页中显示出来遇到的问题和教训
- 用Pages打开word弹出警告
- 关于构造函数 和 析构函数 能否抛出异常的讨论
- 通过HttpClient 调用ASP.NET Web API
- 09:字符菱形
- MySQL redo与undo