Cod sursa(job #868590)

Utilizator dantheroDan Terhesiu danthero Data 31 ianuarie 2013 11:54:18
Problema Hashuri Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 2.03 kb
type      pnod=^nod;
          nod=record
              info:longint;
              dr:pnod;
              end;
var a:array[1..33392] of pnod;
    c:byte;n,j:integer;d,i:longint; t:boolean;
    f,g:text;
    swap:pnod;

procedure adaugare(e:longint);
var d:pnod;
begin
   new(d);
   d^.info:=e;
   d^.dr:=a[i];
   a[i]:=d;
end;

function verificare(x:longint):boolean;
var crt:pnod;ver:boolean;
begin
   case c of
   1 : begin
          crt:=a[i];
          while (crt<>nil) and (crt^.info<>x) do
             crt:=crt^.dr;
          if (crt=nil) then begin
             adaugare(x);
          end
       end;
   2 : begin
          if (a[i]<>nil) then begin
             if (a[i]^.info=x) then begin
                swap:=a[i];
                a[i]:=a[i]^.dr;
                dispose(swap);
             end else begin
                crt:=a[i];
                if (crt^.dr<>nil) then begin
                   while (crt^.dr^.info<>x) and (crt^.dr^.dr<>nil) do
                      crt:=crt^.dr;
                   if (crt^.dr^.info=x) then begin
                      swap:=crt^.dr;
                      crt^.dr:=crt^.dr^.dr;
                      dispose(swap);
                   end
                end
             end
          end
       end;
   3 : begin
          crt:=a[i];
          while (crt<>nil) and (crt^.info<>x) do
             crt:=crt^.dr;
          if (crt=nil) then
             verificare:=false
          else
             verificare:=true;
       end
   end
end;

begin
assign(f,'hashuri.in');reset(f);
assign(g,'hashuri.out');rewrite(g);
readln(f,n);
For i:=1 to 33392 do
  begin
   a[i]:=nil;
  end;
for j:=1 to n do
      begin
             readln(f,c,d);
             i:=(d mod 33391)+1;
             t:=verificare(d);
             if c=3 then
             begin
                 if t=true then
                         writeln(g, '1')
             else
                         writeln(g, '0');
             end;
      end;

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