KMP模板
1 var s,t:array[0..2000000]of char; 2 next:array[0..2000000]of longint; 3 cas,v,i,n,m,ans:longint; 4 5 procedure getnext; 6 var i,j:longint; 7 begin 8 i:=0; j:=1; 9 next[1]:=0; 10 while j<=n do 11 begin 12 if (i=0)or(s[i]=s[j]) then 13 begin 14 inc(i); inc(j); 15 next[j]:=i; 16 end 17 else i:=next[i]; 18 end; 19 end; 20 21 procedure kmp; 22 var i,j:longint; 23 begin 24 i:=1; j:=1; 25 while j<=m do 26 begin 27 if (i=0)or(s[i]=t[j]) then 28 begin 29 inc(i); inc(j); 30 if i>n then 31 begin 32 inc(ans); 33 i:=next[i]; 34 end; 35 end 36 else i:=next[i]; 37 38 end; 39 end; 40 41 begin 42 43 readln(cas); 44 for v:=1 to cas do 45 begin 46 n:=0; m:=0; 47 while not eoln do 48 begin 49 inc(n); read(s[n]); 50 end; 51 readln; 52 while not eoln do 53 begin 54 inc(m); read(t[m]); 55 end; 56 readln; 57 getnext; 58 ans:=0; 59 kmp; 60 writeln(ans); 61 end; 62 63 end.
null