Cod sursa(job #566455)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 29 martie 2011 00:10:41
Problema Hashuri Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.7 kb
type lista=^nod;
     nod=record nr:longint; adr:lista; end;

const modul=4000000;

var v:array[0..modul] of lista;
    x, n, i, o, y: longint;
    p, r:lista;
    ok:boolean;
    f, g:text;

begin
assign (f, 'hashuri.in'); reset(f);
assign (g, 'hashuri.out'); rewrite (g);

read (f, n);
for i := 1 to n do
  begin
  read (f, o, x);
  y:= x mod modul;
  case o of
  1: begin
     if v[y] = nil then
       begin
       new (v[y]); v[y]^.nr:=x; v[y]^.adr:=nil;
       end
                               else
       begin
       ok:= true; p:=v[y]; {ok= true adica e adevarat ca numarul nu exista in sir}
       while (ok=true) and (p^.adr<>nil) do
         begin
         if p^.nr=x then ok := false;
         p:=p^.adr;
         end;
       if p^.nr=x then ok:=false;
       if ok = true then begin new(r); p^.adr:=r; r^.nr:=x; r^.adr:=nil; end;
       end;
     end;
  2: begin
     p:=v[x mod modul];
     ok:=false; {ok=true adica s-a eliminat elementul}
     if p <> nil then
       begin
       if v[x mod modul]^.nr = x then
         begin
         r:= v[x mod modul];
         v[x mod modul] := v[x mod modul]^.adr;
         dispose(r); ok:= true;
         end;
       while (p^.adr <> nil) and (ok=false) do
         begin
         if p^.adr^.nr = x then begin r:=p^.adr; p^.adr:=p^.adr^.adr; dispose(r); ok:=true; end;
         p:=p^.adr;
         end;
       end;
     end;
  3: begin
     ok:= false;
     p:= v[x mod modul];
     while (ok=false) and (p<> nil) do
       begin
       if p^.nr=x then ok := true;
       p:=p^.adr;
       end;
     if ok = true then writeln (g, '1') else writeln (g, '0');
     end;
   end;
  end;

close (f); close (g);
end.