HDU1711 Number Sequence(KMP模版题)
匹配子串
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <queue> #include <vector> #include <cstdio> int a[1000005],b[10005]; int Next[10005]; int n,m; void setNext() { int i=0,j=-1; Next[i]=j; while(i<m) { if(j==-1||b[i]==b[j]) Next[++i]=++j; else j=Next[j]; } return ; } int KMP() { int i=0,j=0; setNext(); while(i<n) { if(j==-1||a[i]==b[j]) { i++; j++; if(j==m) return i-m+1; } else j=Next[j]; } return -1; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); int i; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<m;i++) scanf("%d",&b[i]); printf("%d\n",KMP()); } return 0; }