#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <list>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
#define PF(x) (scanf("%d",&x))
#define PT(x,y) (scanf("%d%d",&x,&y))
#define PR(x) (printf("%d\n",x))
#define PRT(x,y)(printf("%d %d\n",x,y))
#define M 1000005
#define N 10005
int n;
int m;
int fail[M];
int ar[M];
int arr[N];
int kmp(int *str,int *pat)
{
int i,j,k;
memset(fail,-1,sizeof(fail));
for(int i=1;i<m;++i)
{
for(k = fail[i-1];k>=0 && pat[i] != pat[k+1];k=fail[k]);
if(pat[k+1] == pat[i]) fail[i] = k+1;
}
i = 0;j = 0;
while(i<n && j<m)
{
if(pat[j] == str[i]) ++i,++j;
else if(j==0) ++i;
else j = fail[j-1]+1;
}
if(j>=m) return i-j+1;
else return -1;
}
void init()
{
int test;
PF(test);
while(test--)
{
PT(n,m);
for(int i=0;i<n;i++)
PF(ar[i]);
for(int j = 0;j<m;j++)
PF(arr[j]);
PR(kmp(ar,arr));
}
return ;
}
int main()
{
init();
return 0;
}
hdu 1711
最新推荐文章于 2020-07-11 12:42:10 发布