裸的kmp
#include <stdio.h>
long a[1000020],b[10020],p[10020];
int main()
{
long i,j,n,k,x,y;
int flag;
scanf("%ld",&n);
for(k=0;k<n;k++)
{
flag=0;
scanf("%ld%ld",&x,&y);
for(i=1;i<=x;i++)
scanf("%ld",&a[i]);
for(i=1;i<=y;i++)
scanf("%ld",&b[i]);
j=0;
p[1]=0;
for(i=2;i<=y;i++)
{
while(j>0&&b[i]!=b[j+1]) j=p[j];
if(b[i]==b[j+1])
j++;
p[i]=j;
}
j=0;
for(i=1;i<=x;i++)
{
while(j>0&&b[j+1]!=a[i]) j=p[j];
if(b[j+1]==a[i])
j++;
if(j==y)
{
flag=1;
break;
}
}
if(flag)
printf("%ld\n",i-y+1);
else
printf("%ld\n",-1);
}
return 0;
}