int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout); #endif nhap(); xuli(); inkq(); return 0; }
int kmp(char p[], char t[], int id){ //printf("%s\n",t); int m = strlen(p); int n = strlen(t); //printf("%d%d",m,n); int f[220]; int i = 0; int k; f[0] = -1; for (i = 1; i < m; i++){ k = f[i - 1]; while (k >= 0){ if (p[k] == p[i - 1]) break; else k = f[k]; } f[i] = k + 1; } i = 0; k = 0; while (i < n){ if (k == -1){ i++; k = 0; } else if (t[i] == p[k]){ i++; k++; if (k == m){ flag = 1; //printf("%s\n",b[id]); inkq(i-m, m-1, ihead[id], jhead[id], ivector[id], jvector[id]); return 0; } } else k = f[k]; } return 0; }