topic:
Code:
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn = 1000005;
const int maxm = 10005;
int a[maxn],b[maxm];
int main ()
{
int line,n1,n2;
int i,j,flag,p;
scanf("%d",&line);
while(line)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d %d",&n1,&n2);
for (i=0; i<n1; i++)
scanf(" %d",&a[i]);
for (i=0; i<n2; i++)
scanf(" %d",&b[i]);
for (i=0; i<n1; i++)
{
if (a[i]==b[0])
{
p=i;
flag=0;
for (j=0; j<n2; j++)
if (a[i+j]!=b[j])
{
flag=1;
break;
}
}
if (flag==0)
{
break;
}
}
if (flag==0)
printf("%d\n",p+1);
else
printf("-1");
line--;
}
return 0;
}
Explanation:
KMP algorithm analysis: https://www.cnblogs.com/yjiyjige/p/3263858.html