Pagini recente » Cod sursa (job #172829) | Cod sursa (job #2810814) | Cod sursa (job #2486232) | Cod sursa (job #1740940) | Cod sursa (job #171953)
Cod sursa(job #171953)
var t,x:array[0..10001000]of shortint;
v:array[0..21,0..51000]of longword;
h:array[0..21]of longword;
a1,b1,c3,d1:array[0..51000]of longword;
q,m,e,f,d,n,p,l,b,c1,c2,pc,i,j,k:longword;
s:string;
c:char;
w:text;
procedure merge(p,r:longint);
var q:longint;
begin
q:=(p+r)div 2;
if p<q then merge(p,q);
if q+1<r then merge(q+1,r);
for i:=p to r do
begin
c3[i]:=a1[i];
d1[i]:=b1[i];
end;
d:=p;
e:=p;
f:=q+1;
while(e<=q)and(f<=r)do
if(c3[e]<c3[f])then begin a1[d]:=c3[e];
b1[d]:=d1[e];
e:=e+1;
d:=d+1;
end
else begin a1[d]:=c3[f];
b1[d]:=d1[f];
f:=f+1;
d:=d+1;
end;
for i:=e to q do
begin
a1[d]:=c3[e];
b1[d]:=d1[e];
e:=e+1;
d:=d+1;
end;
for i:=f to r do
begin
a1[d]:=c3[f];
b1[d]:=d1[f];
f:=f+1;
d:=d+1;
end;
end;
begin
m:=0;
assign(w,'abc2.in');
reset(w);
while not eoln(w) do
begin
m:=m+1;
read(w,c);
if c='a' then t[m]:=0
else
if c='b' then t[m]:=1
else
if c='c' then t[m]:=2;
end;
readln(w);
n:=0;
while not eof(w)do
begin
n:=n+1;
readln(w,s);
b1[n]:=length(s);
l:=b1[n];
p:=1;
for i:=1 to l do
p:=p*3;
for i:=1 to l do
begin
p:=p div 3;
if s[i]='b' then a1[n]:=a1[n]+p
else
if s[i]='c' then a1[n]:=a1[n]+2*p;
end;
end;
merge(1,n);
for i:=1 to n do
begin
h[b1[i]]:=h[b1[i]]+1;
v[b1[i],h[b1[i]]]:=a1[i];
end;
close(w);
p:=1;
for k:=1 to 20 do
begin
p:=p*3;
if h[k]>0 then
begin
b:=0;
for i:=1 to k-1 do
begin
b:=b*3;
b:=b+t[i];
end;
for i:=k to m do
begin
b:=b*3;
b:=b+t[i];
b:=b-t[i-k]*p;
c1:=1;
c2:=h[k]+1;
while c2-c1>1 do
begin
q:=(c1+c2)div 2;
if v[k,q]>b then c2:=q
else c1:=q;
end;
if(v[k,c1]=b)and(x[i-k+1]=0)then begin pc:=pc+1;
x[i-k+1]:=1;
end;
end;
end;
end;
assign(w,'abc2.out');
rewrite(w);
writeln(w,pc);
close(w);
end.