Cod sursa(job #299388)

Utilizator belgun_adrianBelgun Dimitri Adrian belgun_adrian Data 6 aprilie 2009 18:59:03
Problema Hashuri Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.33 kb
// Arhiva educationala - Hashuri
// H(key) = key mod 65535 = key AND 65535

const
	MARE = 65535;

type
	adresa = ^nod;
	nod = record inf : longint; adr : adresa; end;

var
	n, op, key, i : longint;
	h : array[0..MARE] of adresa;
    f, g : text;

function query   (key : longint) : longint;
var  q : adresa;
begin
q := h [key AND MARE];
while (q <> nil) and (q^.inf <> key) do
	q := q^.adr;
if (q <> nil) then
	query := 1
else
	query := 0;
end;

procedure insert (key : longint);
var q : adresa;
begin
if (query (key) = 0) then
	begin
	new (q);
	q^.inf := key;
	q^.adr := h [key AND MARE];
	h [key AND MARE] := q;
	end;
end;

procedure delete (key : longint);
var q, t : adresa;
begin
q := h [key and MARE];
if (q = nil) then exit;
if (q^.inf = key) then
	begin
	h [key AND MARE] := q^.adr;
	dispose (q);
	exit;
	end;
while (q <> nil) and (q^.adr <> nil) do
	begin
	if (q^.adr^.inf = key) then
		begin
		t := q^.adr;
		q^.adr := q^.adr^.adr;
		dispose (t);
		exit;
		end;
	q := q^.adr;
	end;
end;

begin
assign	(f, 'hashuri.in');		assign	(g, 'hashuri.out');
reset	(f);					rewrite	(g);

readln	(f, n);

for i := 1 to n do
	begin
	readln	(f, op, key);
	case op of
		1 : insert (key);
		2 : delete (key);
		3 : writeln(g, query  (key));
		end;
	end;

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