kmp复习
2014-06-05 10:07
423 查看
http://vjudge.net/contest/view.action?cid=47286#problem/A
Description
Given two sequences of numbers : a[1], a[2], ...... , a
, and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M].
If there are more than one K exist, output the smallest one.
Input
The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate
a[1], a[2], ...... , a
. The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].
Output
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
Sample Input
2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1
Sample Output
6
-1
Description
Given two sequences of numbers : a[1], a[2], ...... , a
, and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M].
If there are more than one K exist, output the smallest one.
Input
The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate
a[1], a[2], ...... , a
. The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].
Output
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
Sample Input
2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1
Sample Output
6
-1
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; const int N=1000002; int a ,next[N/100+2]; int b[N/100+2],m,n; void get_next() { int i,j; next[0]=j=-1; for(i=1;i<m;i++) { while(j>-1&&b[i]!=b[j+1]) j=next[j]; if(b[i]==b[j+1]) j++; next[i]=j; } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) scanf("%d",&b[i]); get_next(); int j=-1,ip=0; int flag=1; for(int i=0;i<n;i++) { while(j>-1&&a[i]!=b[j+1]) { j=next[j]; } if(a[i]==b[j+1]) j++; if(j==m-1) { flag=0; ip=i-j+1; break; } } if(flag==0) printf("%d\n",ip); else printf("-1\n"); } return 0; }
相关文章推荐
- KMP复习小结
- [复习]KMP 字符串匹配
- [复习]KMP 删除子串
- 数据结构与算法复习(20)—— KMP 与字符串算法及其扩展
- 【各种算法】【kmp】复习
- 扩展KMP复习小记
- hdu2087剪花布条+hdu3746Cyclic Nacklace 【kmp复习】
- KMP 复习 再续~~
- 复习KMP
- 复习 KMP 算法
- KMP复习 找字符串
- KMP复习整理
- KMP复习小结
- KMP匹配算法复习。。
- java复习之——运算符
- linux C复习:gcc过程说明
- 计量经济学复习笔记(三)修正版
- POJ2406【KMP-next数组】
- asp.net -mvc框架复习(11)-基于三层架构与MVC实现完整的用户登录
- hrbust 入侵检测 (kmp)