Cod sursa(job #241035)

Utilizator MihaiBunBunget Mihai MihaiBun Data 9 ianuarie 2009 10:21:31
Problema Hashuri Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.94 kb
program hash;
type ref=^inr;
     inr=record
           nr:longint;
           adr:ref
         end;
var f,g:text;
    h:array[0..5896] of ref;
    n,i,op,x,j:longint;
    b,c,d:ref;
begin
   assign(f,'hashuri.in');
   reset(f);
   readln(f,n);
   assign(g,'hashuri.out');
   rewrite(g);
   for i:=0 to 5896 do h[i]:=nil;
   for i:=1 to n do
     begin
     readln(f,op,x);
     j:=x mod 5897;
     case op of
       1:begin
           c:=h[j];
           if c=nil then begin
                          new(b);
                          b^.nr:=x;
                          b^.adr:=nil;
                          h[j]:=b
                         end
                    else begin
                          while (c^.nr<>x) and (c^.adr<>nil) do c:=c^.adr;

                          if (c^.nr<>x)and (c^.adr=nil) then begin
                                          new(d);
                                          d^.nr:=x;
                                          d^.adr:=nil;
                                          c^.adr:=d
                                         end
                         end
          end;
        2:begin
           c:=h[j];
           if c<>nil then begin
                            while (c^.nr<>x) and (c^.adr<>nil) do begin
                                                                   b:=c;
                                                                   c:=c^.adr;
                                                                  end;


                            if (c^.nr=x) then if c<>h[j] then b^.adr:=c^.adr
                                                         else h[j]:=h[j]^.adr
                          end;
          end;
        3:begin
          c:=h[j];
          while (c^.nr<>x) and( c^.adr<>nil) do c:=c^.adr;
          if c^.nr=x then writeln(g,1)
                     else writeln(g,0);
          end;
     end;
     end;
  close(f);
  close(g);
  end.