基础KMP题
#include<cstdio>
using namespace std;const int maxn=10000+100;int ch[maxn*100],ph[maxn];
int fail[maxn];
int n,m;inline void getFail(){fail[0]=fail[1]=0;for(int i=1;i<m;i++){int j=fail[i];while(j && ph[i]!=ph[j]) j=fail[j];fail[i+1]= (ph[i]==ph[j]?j+1:0);}
}inline int match(){int j=0;for(int i=0;i<n;i++){while(j && ch[i]!=ph[j]) j=fail[j];if(ch[i]==ph[j]) j++;if(j==m) return i-m+2;}return -1;
}int main(){int T;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%d",&ch[i]);for(int i=0;i<m;i++) scanf("%d",&ph[i]);getFail();printf("%d\n",match());}
}