KMP
char a[maxn];
char b[maxn];
int Next[maxn];
void getNext(int m) {
int j = 0, k = -1;
Next[0] = -1;
while(j < m) {
if(k == -1 || b[j] == b[k]) {
j ++,k ++;
Next[j] = k;
} else k = Next[k];
}
}
int KMP(int n,int m) {
getNext(m);
int cnt = 0,i = 0,j = 0;
while(i < n) {
if(j == -1 || b[j] == a[i]) {
i ++, j ++;
} else j = Next[j];
if(j == m) {
cnt ++;
j = 0;
}
}
return cnt;
}