记录下模板。
刚学了一下,看了别人的一份模板,自己打了一下,以后就用这个吧
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 }
时间: 2024-12-29 23:40:52