Pagini recente » Cod sursa (job #2242649) | Cod sursa (job #581247) | Cod sursa (job #269932) | Rating Alexandru Cosmina-Valentina (alexandru.cosmina) | Cod sursa (job #963576)
Cod sursa(job #963576)
program trie;
type arbore=^celula;
celula=record
info,trec:longint;
alf:array ['a'..'z'] of arbore;
end;
var tr,r:arbore;
op:byte;
c:char;
s:ansistring;
bufin,bufout:array [1..100000] of byte;
procedure adauga(s:ansistring);
var r,q:arbore;
i:longint;
begin
q:=tr;
for i:=1 to length(s) do
begin
if q^.alf[s[i]]=nil then
begin
new(r);
r^.info:=0;
r^.trec:=0;
q^.alf[s[i]]:=r;
end;
inc(q^.trec);
q:=q^.alf[s[i]];
end;
inc(q^.info);
end;
procedure sterge(s:ansistring);
var q:arbore;
i:longint;
begin
q:=tr;
for i:=1 to length(s) do
begin
q:=q^.alf[s[i]];
dec(q^.trec);
end;
dec(q^.info);
end;
function numaparitii(s:ansistring):longint;
var q:arbore;
i:longint;
ok:boolean;
begin
q:=tr; ok:=true;
for i:=1 to length(s) do
begin
if ok then
begin
q:=q^.alf[s[i]];
if q= nil then ok:=false;
end;
end;
if ok then numaparitii:=q^.info
else numaparitii:=0;
end;
procedure prefix(s:ansistring);
var q:arbore;
i:longint;
ok:boolean;
begin
q:=tr;
i:=1; ok:=true;
while (q^.alf[s[i]]<>nil)and ok do
begin
q:=q^.alf[s[i]];
if q^.trec>0 then inc(i)
else ok:=false;
end;
writeln(i);
end;
begin
assign(input,'trie.in');
reset(input);
settextbuf(input,bufin);
assign(output,'trie.out');
rewrite(output);
settextbuf(output,bufout);
new(tr);
tr^.info:=0;
while eof do
begin
readln(op,c,s);
case op of
0: adauga(s);
1: sterge(s);
2: writeln(numaparitii(s));
3: prefix(s);
end;
end;
close(output);
end.