#include<stdio.h> #include<string.h> long s[1000005],t[10005]; int next[10005],m,n; void get_next(long t[10005]) { int i=0,j=-1; next[0]=-1; while(i<n) { if(j==-1||t[i]==t[j]) {++i; ++j; next[i]=j; } else j=next[j]; } } int index_kmp(long s[1000005],long t[10005],int pos) { int i=pos,j=0; while(i<m&&j<n) { if(j==-1||s[i]==t[j]) { ++i;++j;} else j=next[j]; } if(j>=n) return i-n; else return -1; } int main() { int T,f,i; scanf("%d",&T); while(T--) { scanf("%d %d",&m,&n); for(i=0;i<m;i++) scanf("%d",&s[i]); for(i=0;i<n;i++) scanf("%d",&t[i]); get_next(t); f=index_kmp(s,t,0); if(f!=-1)printf("%d\n",f+1); else printf("%d\n",f); } return 0; }
KMP