kmp模版
#include<cstdio>
int a[1000001],b[1000001],next[1000001];
void getnext(int* a,int len)
{
next[1]=0;
int k=0;
for(int i=2;i<len+1;i++)
{
while(k>0&&a[k]!=a[i-1]) k=next[k];
if(a[k]==a[i-1]) k++;
next[i]=k;
}
}
int kmp(int* a,int* b,int n,int m)
{
getnext(b,m);
int k=0;
for(int i=0;i<n;i++)
{
while(k>0&&b[k]!=a[i]) k=next[k];
if(b[k]==a[i]) k++;
if(k==m) return i-k+2;
}
return -1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
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]);
printf("%d\n",kmp(a,b,n,m));
}
return 0;
}