Pagini recente » Cod sursa (job #1874642) | Clasament simulare-juniori-8-oji | Cod sursa (job #920131) | Cod sursa (job #1742766) | Cod sursa (job #384050)
Cod sursa(job #384050)
program trie_dictionary;
type trie=^adat;
adat=record
szam:0..100000;
gyerek:byte;
betu:char;
kov:array['a'..'z'] of trie;
end;
karlanc=string[25];
egesz=0..100005;
var gy:trie;
f,g:text;
temp:byte;
s:string[25];
i:char;
procedure beszur(gy:trie;s:karlanc);
begin
if gy^.kov[s[1]]=nil then begin
inc(gy^.gyerek);
new(gy^.kov[s[1]]);
gy^.kov[s[1]]^.gyerek:=0;
gy^.kov[s[1]]^.szam:=0;
gy^.kov[s[1]]^.betu:=s[1];
for i:='a' to 'z' do gy^.kov[s[1]]^.kov[i]:=nil;
end;
if length(s)=1 then inc(gy^.kov[s[1]]^.szam) else
beszur(gy^.kov[s[1]],copy(s,2,length(s)-1));
end;
procedure torol(gy:trie;s:karlanc);
begin
if length(s)>1 then begin
torol(gy^.kov[s[1]],copy(s,2,length(s)-1));
end else begin
dec(gy^.kov[s[1]]^.szam);
end;
if (gy^.kov[s[1]]^.gyerek=0) and (gy^.kov[s[1]]^.szam=0) then begin
dispose(gy^.kov[s[1]]);
dec(gy^.gyerek);
gy^.kov[s[1]]:=nil;
end;
end;
function szamol(gy:trie;s:karlanc):egesz;
begin
if (length(s)=1)and(gy^.kov[s[1]]<>nil) then szamol:=gy^.kov[s[1]]^.szam else
if gy^.kov[s[1]]<>nil then szamol:=szamol(gy^.kov[s[1]],copy(s,2,length(s)-1)) else
szamol:=0;
end;
function szamol2(gy:trie;s:karlanc;x:egesz):egesz;
var xx:egesz;
begin
if (length(s)=1) then
if gy^.kov[s[1]]^.szam>=2 then szamol2:=x else szamol2:=0 else
begin
if gy^.kov[s[1]]<>nil then begin
xx:=szamol2(gy^.kov[s[1]],copy(s,2,length(s)-1),x+1);
if (gy^.gyerek>=2) and (x>xx) then szamol2:=x else szamol2:=xx;
end else szamol2:=x;
end;
end;
begin
assign(f,'trie.in');reset(f);
assign(g,'trie.out');rewrite(g);
new(gy);
for i:='a' to 'z' do gy^.kov[i]:=nil;
gy^.gyerek:=0;
gy^.szam:=0;
gy^.betu:='x';
while not (eof(f)) do begin
read(f,temp);
read(f,s);
delete(s,1,1);
if temp=0 then beszur(gy,s) else
if temp=1 then torol(gy,s) else
if temp=2 then {writeln(g,szamol(gy,s))} else
{writeln(g,szamol2(gy,s,0))};
end;
close(f);
close(g);
end.