Cod sursa(job #869113)

Utilizator rotarraresRotar Rares rotarrares Data 31 ianuarie 2013 22:35:23
Problema Hashuri Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 2.01 kb
type      pnod=^nod;
          nod=record
              info:longint;
              dr:pnod;
              end;
var a:array[1..1000001] of PNOD;
                      c:byte;n,j:integer;d,i:longint; t:boolean;
      f,g:text;
procedure adaugare(e:longint);
var d:pnod;
begin
new(d);
d^.dr:=a[i];
d^.info:=e;
a[i]:=d;
end;

function verificare(x:longint):boolean;
var r,k:pnod;ver:boolean;
begin
   ver:=false;
   If (a[i]=nil) then
       begin
       If c=1 then
         Begin
         new(a[i]);
         a[i]^.info:=x;
         a[i]^.dr:=nil;
         end;
       end
   else
   begin
       if a[i]^.dr<>nil then
       Begin
       r:=a[i];
       while (r^.dr^.dr<>nil) and (r^.dr<>nil) do
{verifica dinainte daca urmatorul nod contine x pentru
a sarii peste el(sterge) in cazul c=2}
            begin
            if r^.dr^.info=x then
                begin
                ver:=true;
                if c=2 then
                begin
                k:=r^.dr;
                r^.dr:=r^.dr^.dr;
                dispose(k);
                end;
                end;
            r:=r^.dr;
            end
       end
       else
       begin
       If c=2 then
          If x=a[i]^.info then
          begin
          dispose(a[i]);
       If x=a[i]^.info then
          ver:=true;
       end;
       end;
   end;
  verificare:=ver;
end;

begin
assign(f,'hashuri.in');reset(f);
assign(g,'hashuri.out');rewrite(g);
readln(f,n);
for j:=1 to n do
      begin
             readln(f,c,d);
             i:=(d mod 1000000)+1;
             t:=verificare(d);
             If (c=1) and (t=false) then
                   adaugare(d);
             if c=3 then
             begin
                 if t=true then
                     begin
                         writeln(g,'1');
                     end
             else
                     begin
                         writeln(g,'0');
                     end
             end;
      end;

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