Cod sursa(job #100760)

Utilizator CezarMocanCezar Mocan CezarMocan Data 12 noiembrie 2007 18:16:00
Problema Abc2 Scor 0
Compilator fpc Status done
Runda Happy Coding 2007 Marime 1.69 kb
const m=666013;
      m2=700001;
var c:char;
    s:string;
    i,j,n,nr,t,p,rez,nr2:longint;
    v:array[0..666020]of boolean;
    z:array[0..700200]of boolean;
    x:array[1..10000110]of char;

begin
assign(input,'abc2.in');reset(input);
assign(output,'abc2.out');rewrite(output);
readln(x);
p:=1;
while ord(x[p])<>0 do
        inc(p);
dec(p);
readln(s);
n:=length(s);
for i:=1 to n do
        begin
        nr:=nr*3+ord(s[i])-97;
        nr2:=nr2*3+ord(s[i])-97;
        while nr2>=m2 do
                nr2:=nr2-m2;
        while nr>=m do
                nr:=nr-m;
        end;
v[nr]:=true;
z[nr2]:=true;
nr:=0;
nr2:=0;
while not eof do
        begin
        readln(s);
        for i:=1 to n do
                begin
                nr:=nr*3+ord(s[i])-97;
                nr:=nr mod m;
                nr2:=nr2*3+ord(s[i])-97;
                nr2:=nr2 mod m2;
                end;
        v[nr]:=true;
        z[nr2]:=true;
        nr:=0;
        nr2:=0;
        end;
t:=1;
for i:=1 to n-1 do
        t:=(t*3) mod m;
for i:=1 to n do
        begin
        nr:=nr*3+ord(x[i])-97;
        nr:=nr mod m;
        nr2:=nr2*3+ord(x[i])-97;
        nr2:=nr2 mod m2;
        end;
if (v[nr])and(z[nr2]) then
        inc(rez);
for i:=n+1 to p do
        begin
        nr:=nr-t*(ord(x[i-n])-97);
        if nr<0 then
                nr:=nr+m;
        nr:=nr*3+ord(x[i])-97;
        nr2:=nr2-t*(ord(x[i-n])-97);
        if nr2<0 then
                nr2:=nr2+m2;
        nr2:=nr2*3+ord(x[i])-97;
        nr:=nr mod m;
        nr2:=nr2 mod m2;
        if (v[nr])and(z[nr2]) then
                inc(rez);
        end;
writeln(rez);
close(input);close(output);
end.