Cod sursa(job #1180236)

Utilizator azkabancont-vechi azkaban Data 30 aprilie 2014 11:23:39
Problema Hashuri Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 2.76 kb
Program hashuri;
const prim=666013;
type lista=^cell;
     cell= record
                info:longint;
                pred:lista;
           end;
var t,n,i,a,b,ok: longint;
    lhash : array [0..666013] of lista;
    bin,bout : array [0..1 shl 17 ] of char;
    v,r,p:lista;

procedure add(nod : longint; var v : lista);
var r : lista;
  begin
      new(r);
      r^.info:=nod;
      r^.pred:=v;
      v:=r;
  end;

begin
    assign(input,'hashuri.in');settextbuf(input,bin);  reset(input);
    assign(output,'hashuri.out'); settextbuf(output,bout); rewrite(output);
    readln(t);
    for i:=0 to prim do lhash[i]:=nil;
    for i:=1 to t do begin
                           read(a,b);
                           v:=lhash[b mod prim];
    case a of
          1 : begin
                   while v<>nil do begin
                                   if v^.info=b then begin
                                                          ok:=1;
                                                          break;
                                                      end;
                                   v:=v^.pred;
                                   end;
                   if ok=0 then add(b,lhash[b mod prim]);
                   ok:=0;
              end;

          3 : begin
                   while v<>nil do begin
                                        if v^.info=b then begin
                                                               ok:=1;
                                                               break;
                                                            end;
                                        v:=v^.pred;
                                     end;
                   writeln(ok);
                   ok:=0;
              end;

          2 : begin
                  r:=lhash[b mod prim];
                  if lhash[b mod prim]<>nil then
                               if lhash[b mod prim]^.info=b then
                                                             lhash[b mod prim]:=lhash[b mod prim]^.pred
                                            else
                               while v<>nil do begin
                                      if v^.info=b then begin
                                                            r^.pred:=v^.pred;
                                                            dispose(r);
                                                            break;
                                                        end;
                                                     r:=v;
                                                     v:=v^.pred;
                                                end;
               end;
       end;
                      end;
    close(input);
    close(output);
end.