Cod sursa(job #1180016)

Utilizator LycrsTrifan Tamara Lycrs Data 29 aprilie 2014 19:45:46
Problema Hashuri Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 2.06 kb
type Lista=^celula;
     celula=record
                info: longint;
                next: lista;
             end;
const y=7013;
var a: array[0..7013] of lista;
    x, i, n: longint;
    o: 1..3;

function cauta(x: longint): boolean;
var r: lista;
    u: boolean;
begin
 u:=false;
 r:=a[x mod y];
 while (r<>nil) and (r^.info<>x) do r:=r^.next;

 if r<>nil then u:=true;
 cauta:=u;
end;


procedure adauga(x: longint);
var r, p, v: lista;
Begin
 if not cauta(x) then
  BEGIN
    r:=a[x mod y]; p:=nil;
    while (r<>nil) and (r^.info<x) do Begin
                                                p:=r;
                                                r:=r^.next;
                                        end;
    if (r=nil) and (p=nil) then Begin
                                   new(v);
                                   v^.info:=x;
                                   v^.next:=nil;
                                   a[x mod y]:=v;
                                end
    else if p<>nil then
     if r=nil then Begin
                        new(v);
                        v^.info:=x;
                        v^.next:=r;
                        p^.next:=v;
                   end;

  END;

end;

procedure sterge(x: longint);
var v, r, p: lista;
Begin
 r:=a[x mod y]; p:=nil;
 while (r<>nil) and (r^.info<>x) do Begin
                                        p:=r;
                                        r:=r^.next;
                                    end;

 if (r<>nil) and (r^.info=x) then Begin

                    if p=nil then a[x mod y]:=r^.next
                             else p^.next:=r^.next;
                        dispose(r);
                   end;
end;


begin
 assign(input,'hashuri.in');
 reset(input);
 assign(output,'hashuri.out');
 rewrite(output);
 for i:=0 to 7013 do a[i]:=nil;
 readln(n);
 for i:=1 to n do
 Begin
  readln(o, x);
  if o=1 then adauga(x) else
  if o=2 then sterge(x) else
  if o=3 then if cauta(x) then writeln(1) else writeln(0);
 end;




 close(input);
 close(output);
end.