#include<stdio.h>
int A[1000005],B[10005];
int next[10005];
int n,m;
void init_next()
{
int i,j;
next[1]=0;
for(i=2,j=0;i<=m;i++)
{
while(j>0&&B[i]!=B[j+1])
j=next[j];
if(B[i]==B[j+1])
j++;
next[i]=j;
}
}
int KMP()
{
int i,j;
for(i=1,j=0;i<=n;i++)
{
while(j>0&&A[i]!=B[j+1])
j=next[j];
if(A[i]==B[j+1])
j++;
if(j==m)
return i-j+1;
}
return -1;
}
int main()
{
int i,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",A+i);
for(i=1;i<=m;i++)
scanf("%d",B+i);
init_next();
printf("%d\n",KMP());
}
return 0;
}
hdu1711
最新推荐文章于 2021-04-06 14:09:40 发布