说实话,很不明白这个题目非常的奇怪,用kmp的耗时比暴搜都长。。。。。
全当锻炼kmp了~~~~
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int str[1000005];
int p[10005];
int n1,n2;
int next[10005];
void chu()
{
int i,j;
i=0,j=-1;
next[i]=j;
while(i<n2)
{
if(j==-1||p[i]==p[j])
{
i++;
j++;
if(p[i]==p[j])next[i]=next[j];
else next[i]=j;
}
else j=next[j];
}
}
void pipei()
{
int i,j;
i=0,j=0;
while(i<n1&&j<n2)
{
if(j==-1||p[j]==str[i])
{
j++;
i++;
}
else
{
j=next[j];
}
}
if(j<n2)cout<<"-1"<<endl;
else cout<<i-n2+1<<endl;
}
int main()
{
int T,i;
cin>>T;
while(T--)
{
cin>>n1>>n2;
for(i=0;i<n1;i++)
{
scanf("%d",&str[i]);
}
for(i=0;i<n2;i++)
{
scanf("%d",&p[i]);
}
chu();
pipei();
}
return 0;
}