#include<stdio.h>
#include<string>
#include<map>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1e4+10;
const int MOD=1e9+7;
int n,m,k;
int a[1000005],b[N];
int nex[N];
void getnex(){
nex[1]=nex[2]=-1;
int i=2,j=1;
while(i<m){
if(j==-1){i++;j=1;nex[i]=-1;}
else if(b[i]==b[j]) {i++;j++;nex[i]=j;}
else j=nex[j];
}
}
int solve(){
int i=1,j=1;
while(i<=n && j<=m){
if(j==-1) {i++;j=1;}
else if(a[i]==b[j]) {i++;j++;}
else j=nex[j];
}
if(j>m) return i-m;
else return -1;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("aaa","r",stdin);
#endif
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",a+i);
for(int i=1;i<=m;i++) scanf("%d",b+i);
getnex();
printf("%d\n",solve());
}
return 0;
}
hdu1711 kmp入门
最新推荐文章于 2020-08-04 21:20:08 发布