Pagini recente » Cod sursa (job #1581501) | Cod sursa (job #847080) | Cod sursa (job #150617) | Cod sursa (job #1098801) | Cod sursa (job #848102)
Cod sursa(job #848102)
program trie_;
type trie=^celula;
celula=record
info,info2:longint;
alf:array ['a'..'z'] of trie;
end;
var f1,f2:text;
t:trie;
op:byte;
s:string;
c:char;
bufin,bufout:array[1..100000] of byte;
procedure zero;
var i:byte;
r,q:trie;
begin
i:=1; r:=t;
while i<=length(s) do
begin
if r^.alf[s[i]] = nil then begin
new(q);
q^.info:=0; q^.info2:=0;
for c:='a' to 'z' do q^.alf[c]:=nil;
r^.alf[s[i]]:=q;
end;
r:=r^.alf[s[i]];
inc(r^.info2);
inc(i);
end;
inc(r^.info);
end;
procedure one;
var i:byte;
r:trie;
b:boolean;
begin
i:=1;r:=t;
while i<=length(s) do
begin
b:=true;
r:=r^.alf[s[i]];
dec(r^.info2);
inc(i);
end;
dec(r^.info);
end;
procedure two;
var i:byte;
r:trie;
begin
i:=1; r:=t;
while (i<=length(s)) and (r<>nil) do begin r:=r^.alf[s[i]]; inc(i); end;
if r=nil then writeln(f2,0)
else writeln(f2,r^.info);
end;
procedure three;
var i:byte;
r:trie;
begin
i:=1;r:=t;
while (r^.info2<>0)and(r^.alf[s[i]]<>nil) do
begin
r:=r^.alf[s[i]];
inc(i);
end;
dec(i);
if r^.info2=0 then dec(i);
writeln(f2,i);
end;
begin
assign(f1,'trie.in');
reset(f1);
assign(f2,'trie.out');
rewrite(f2);
settextbuf(f1,bufin);
settextbuf(f2,bufout);
new(t);t^.info:=0;t^.info2:=1;
for c:='a' to 'z'do t^.alf[c]:=nil;
while not eof(f1) do
begin
readln(f1,op,c,s);
case op of
0:zero;
1:one;
2:two;
3:three;
end;
end;
close(f1);
close(f2);
end.