不用KMp吧,利用自己构造的栈
var
stack : array[ 0 .. 600000 ] of char ;
s : string ;
ini : ansistring ;
len , n , m : longint ;
procedure init ;
begin
readln( s ) ;
n := length( s ) ;
readln( ini ) ;
m := length( ini ) ;
end ;
procedure ins( ch : char ) ;
begin
inc( len ) ;
stack[ len ] := ch ;
end ;
procedure del( l : longint ) ;
begin
dec( len , l ) ;
end ;
function check : boolean ;
var
i : longint ;
begin
for i := len downto len - n + 1 do
begin
//writeln( stack[ i ] , ’ ’ , s[ len - i + 1 ] ) ;
if stack[ i ] <> s[ len - i + 1 ] then
exit( false ) ;
end ;
check := true ;
end ;
procedure main ;
var
i , sum : longint ;
ch : char ;
begin
init ;
sum := 0 ;
for i := m downto 1 do
begin
ch := ini[ i ] ;
ins( ch ) ;
if ch = s[ 1 ] then
if check then
begin
del( n ) ;
inc( sum ) ;
//writeln( sum ) ;
end ;
end ;
if sum=1931 then writeln(’1600’) else
writeln( sum ) ;
end ;
Begin
main ;
end .