裸的kmp
#include <stdio.h> long a[1000020],b[10020],p[10020]; int main() { long i,j,n,k,x,y; int flag; scanf("%ld",&n); for(k=0;k<n;k++) { flag=0; scanf("%ld%ld",&x,&y); for(i=1;i<=x;i++) scanf("%ld",&a[i]); for(i=1;i<=y;i++) scanf("%ld",&b[i]); j=0; p[1]=0; for(i=2;i<=y;i++) { while(j>0&&b[i]!=b[j+1]) j=p[j]; if(b[i]==b[j+1]) j++; p[i]=j; } j=0; for(i=1;i<=x;i++) { while(j>0&&b[j+1]!=a[i]) j=p[j]; if(b[j+1]==a[i]) j++; if(j==y) { flag=1; break; } } if(flag) printf("%ld ",i-y+1); else printf("%ld ",-1); } return 0; }