最基础KMP模板
#include <stdio.h> #include <vector> #include <string.h> #include <algorithm> using namespace std; const int MAXN = 1000010; const int MAXM = 10010; int lenT, lenP, next[MAXM]; int strT[MAXN], strP[MAXM]; void getNext() { int i = 0, j = -1; next[0] = -1; while (i < lenP) { if ( j== -1 || strP[i] == strP[j]) { ++i, ++j; next[i] = j; } else j = next[j]; } } int kmp() { int i = 0, j = 0; while (i < lenT) { if ( j == -1 || strT[i] == strP[j]) i++, ++j; else j = next[j]; if ( j == lenP) return i-j+1; } return -1; } int main() { #ifdef __GNUC__ freopen ( "in.txt", "r", stdin ); #endif // __GNUC__ int t; scanf("%d", &t); while (t--) { scanf("%d%d", &lenT, &lenP); for (int i = 0; i< lenT; ++i) scanf("%d", &strT[i]); for (int i = 0; i< lenP; ++i) scanf("%d", &strP[i]); getNext(); printf("%d\n", kmp()); } return 0; }
hdu 1711 Number Sequence
最新推荐文章于 2020-07-12 20:18:12 发布