Pagini recente » Cod sursa (job #652154) | Cod sursa (job #1603964) | Cod sursa (job #2285809) | Cod sursa (job #1697415) | Cod sursa (job #963590)
Cod sursa(job #963590)
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;
q:=q^.alf[s[i]];
inc(q^.trec);
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-1);
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 not 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.