hdu 1686 Oulipo
https://vjudge.net/problem/HDU-1686
题意:
求模板串在文本串中出现的次数。
思路:
果果的kmp模板题啊,所以直接上模板啦。用的是lrj大大的白书的模板。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 4 char text[1000005]; 5 char w[10005]; 6 int fl[1000005]; 7 8 void getfail(char *P,int *f) 9 { 10 int m = strlen(P); 11 f[0] = 0;f[1] = 0; 12 13 for (int i = 1;i < m;i++) 14 { 15 int j = f[i]; 16 17 while (j && P[i] != P[j]) j = f[j]; 18 19 f[i+1] = P[i] == P[j] ? j+1 : 0; 20 } 21 } 22 23 int find(char *T,char *P,int *f) 24 { 25 int ans = 0; 26 int n = strlen(T),m = strlen(P); 27 28 getfail(P,f); 29 30 int j = 0; 31 32 for (int i = 0;i < n;i++) 33 { 34 while (j && P[j] != T[i]) j = f[j]; 35 if (P[j] == T[i]) j++; 36 if (j == m) ans++; 37 } 38 39 return ans; 40 } 41 42 int main() 43 { 44 int t; 45 46 scanf("%d",&t); 47 48 while (t--) 49 { 50 memset(fl,0,sizeof(fl)); 51 52 scanf("%s",w); 53 scanf("%s",text); 54 55 int ans = find(text,w,fl); 56 57 printf("%d\n",ans); 58 } 59 60 return 0; 61 }
康复训练中~欢迎交流!