Cod sursa(job #869692)

Utilizator dantheroDan Terhesiu danthero Data 1 februarie 2013 23:58:47
Problema Hashuri Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.74 kb
type pnod=^nod;
     nod = record
        info: longint;
        next: pnod;
     end;
var  list: array[1..33392] of pnod;
     max, ind, nr, n, i: longint;
     oper: integer;
     f,g: text;

procedure adauga(nr: longint);
var crt,elem: pnod;
begin
   ind := (nr mod max) + 1;
   crt := list[ind];
   while (crt<>nil) and (crt^.info<>nr) do
      crt := crt^.next;
   if (crt=nil) then begin
      new(elem);
      elem^.info := nr;
      elem^.next := list[ind];
      list[ind] := elem;
   end
end;

procedure sterge(nr: longint);
var crt, elem: pnod;
begin
   ind := (nr mod max) + 1;
   crt := list[ind];
   if (crt<>nil) then begin
      if (crt^.info=nr) then begin
         elem := crt;
         list[ind] := crt^.next;
         dispose(crt);
      end else begin
         while (crt^.next<>nil) and (crt^.next^.info<>nr) do
            crt := crt^.next;
         if (crt^.next<>nil) and (crt^.next^.info = nr) then begin
            elem := crt^.next;
            crt^.next := elem^.next;
            dispose(elem);
         end;
      end;
   end;
end;

function cauta(nr: longint): integer;
var found: boolean;
    crt: pnod;
begin
   ind := (nr mod max) + 1;
   crt := list[ind];
   while (crt<>nil) and (crt^.info<>nr) do
      crt := crt^.next;
   if (crt=nil) then
      cauta := 0
   else
      cauta := 1;
end;

begin
   max:=33391;
   assign(f, 'hashuri.in'); reset(f);
   assign(g, 'hashuri.out'); rewrite(g);
   readln(f, n);
   for i := 1 to n do begin
      readln(f, oper, nr);
      case oper of
         1 : begin
                adauga(nr);
             end;
         2 : begin
                sterge(nr);
             end;
         3 : begin
                writeln(g, cauta(nr));
             end;
      end;
   end;
   close(f);
   close(g);
end.