#include<stdio.h>
int t[1000010],p[10100],next[10100];
int n,m;
void getnext()
{
int i,j;
next[1]=0;
i=1;
j=0;
while(i<=m)
{
if(j==0||p[i]==p[j])
{
i++;
j++;
if(p[i]!=p[j]) next[i]=j;
else next[i]=next[j];
}
else
{
j=next[j];
}
}
}
int main()
{
int g,i,j;
scanf("%d",&g);
while(g--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&t[i]);
for(i=1;i<=m;i++)
scanf("%d",&p[i]);
getnext();
i=1;
j=1;
while(i<=n&&j<=m)
{
if(j==0||t[i]==p[j])
{
i++;
j++;
}
else
{
j=next[j];
}
}
if(j>m)
printf("%d\n",i-j+1);
else printf("-1\n");
}
return 0;
}
hdu 1711 Number Sequence--KMP
最新推荐文章于 2019-08-16 19:46:48 发布