Cod sursa(job #327162)

Utilizator levap1506Gutu Pavel levap1506 Data 27 iunie 2009 14:01:13
Problema Hashuri Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.62 kb
program hash;

 type   cell=^list;
        list=record
         v:longint;
         urm:cell;
         end;
 var a,b:text;
  i,j,k,xiun:longint;
  op:shortint;
  z:array[0..666012] of cell;
  procedure insert(j:longint);
  var i:longint;
     r:cell;
   begin
    i:=j mod 666013;
    r:=z[i];
    if r=nil then
     begin
      new(z[i]);
      r:=z[i];
      r^.v:=j;
      r^.urm:=nil;
      exit;
     end;
    while (r^.urm<>nil) and (r^.v<>j) do
     begin
       r:=r^.urm;
     end;
    if (r^.v<>j) and (r^.urm=nil) then
     begin
      new(r^.urm);
      r:=r^.urm;
      r^.v:=j;
     end;
   end;
  procedure delete(j:longint);
  var i:longint;
     r,v:cell;
   begin
    i:=j mod 666013;
    v:=nil;
    r:=z[i];
    if r=nil then exit;
    while (r^.urm<>nil) and (r^.v<>j) do
     begin
       v:=r;
       r:=r^.urm;
     end;

    if (r^.v=j) then
     begin
      if v=nil then z[i]:=r^.urm else
        v^.urm:=r^.urm;
     end;
   end;
  procedure check(j:longint);
  var i:longint;
     r:cell;
   begin
    i:=j mod 666013;
    r:=z[i];
    if r=nil then begin Writeln(b,0); exit; end;
    while (r^.urm<>nil) and (r^.v<>j) do
     begin
        r:=r^.urm;
     end;
    if (r^.v=j) then
        Writeln(b,1) else Writeln(b,0);
   end;
  begin
   assign(a,'hashuri.in');
   assign(b,'hashuri.out');
   reset(a);
   rewrite(b);
   Readln(a,k);
   for i:=0 to 666012 do
     z[i]:=nil;
   for i:=1 to k do
    begin
     Readln(a,op,j);
     if op=1 then insert(j) else
     if op=2 then delete(j) else
     check(j);
    end;
   close(b);
  end.