hihoKMP & POj3461

记录下模板。

刚学了一下,看了别人的一份模板,自己打了一下,以后就用这个吧

 1 #include <cstdio>
 2 #include <cstring>
 3 char s[1000005],ss[10005];
 4 int next[10005],ans;
 5 void getNext(int len){
 6     int i = 0,j = -1;
 7     next[0] = j;
 8     while(i<len){
 9         while(j!=-1&&ss[j]!=ss[i])j = next[j];
10         i++;j++;
11         if(j>=len)next[i] = next[j-1];
12         else next[i] = j;
13     }
14 }
15 void KMP(int len,int m){
16     int i = 0,j = 0;
17     while(i<len){
18         while(j!=-1&&ss[j]!=s[i])j = next[j];
19         i++;j++;
20         if(j==m){
21             ans++;j = next[j];
22         }
23     }
24 }
25 int main()
26 {
27     int T;scanf("%d",&T);
28     while(T--){
29         scanf("%s%s",ss,s);
30         ans = 0;
31         getNext(strlen(ss));
32         KMP(strlen(s),strlen(ss));
33         printf("%d\n",ans);
34     }
35     return 0;
36 }

 

posted on 2015-08-13 00:48  round_0  阅读(164)  评论(0编辑  收藏  举报

导航