abcde a3 aaaaaa aa #
0 3
母串最多可分出几个字串
#include<stdio.h> #include<iostream> #include<math.h> #include<stdlib.h> #include<ctype.h> #include<algorithm> #include<vector> #include<string.h> #include<queue> #include<stack> #include<set> #include<map> #include<sstream> #include<time.h> #include<malloc.h> using namespace std; char a[100000500], b[10005000]; int Next[10005000], ans; void get_next(char b[], int m) { int i = 0; Next[0] = -1; int j = -1; while (i<m) { if (j == -1 || b[i] == b[j]) { ++i; ++j; if (b[i] == b[j]) Next[i] = Next[j]; else Next[i] = j; } else j = Next[j]; } } int KMP(char a[], int n, char b[], int m, int Next[], int pos) { int i = pos; int j = 0; while (i<n&&j<m) { if (j == -1 || a[i] == b[j]) { ++i; ++j; } else j = Next[j]; if (j == m) { ans++; j = Next[j]; i += j; } } return ans; } int main() { int test, n, m, i, j; while (scanf("%s", a)!=EOF && a[0] != '#') { scanf("%s",b); ans = 0; n = strlen(a); m = strlen(b); get_next(b,m); KMP(a,n,b,m,Next,0); printf("%d\n",ans); } }