模板题不解释
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<limits.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n,m;
int p[1000005],a[1000005],b[10005];
int ans;
void print()
{
p[1]=0;
int i,j=0;
for(i=2;i<=m;i++)
{
while(j>0 && b[j+1]!=b[i])
j=p[j];
if(b[j+1]==b[i])
j++;
p[i]=j;
}
}
void kmp()
{
int i,j=0;
for(i=1;i<=n;i++)
{
while(j>0 && b[j+1]!=a[i])
j=p[j];
if(a[i]==b[j+1])
j++;
if(j==m)
{
ans=i;
return ;
}
}
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--)
{
ans=-1;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(j=1;j<=m;j++)
scanf("%d",&b[j]);
print();
kmp();
if(ans==-1)
printf("-1\n");
else
printf("%d\n",ans-m+1);
}
}