Cod sursa(job #25374)

Utilizator valkyriaValkyria Dark valkyria Data 4 martie 2007 12:17:29
Problema Magazin Scor 0
Compilator fpc Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 0.99 kb
Program magazin;
type produs=record n,m:integer;end;
var v:array[0..50000] of produs;
	s:array[1..50000]of 0..1;
	f,g:text;
	n,m,d,i,pc:integer;
	p,count:longint;
	delta:longint;

Function min(a,b:longint):longint;
begin
	if a>b then min:=a
	else min:=b;
end;

Procedure cont;
var i,nxt:integer;dmin,dtmp:longint;
begin
	dmin:=n*d+m;
	for i:=1 to p do
	if s[i]=0 then
	begin
		if (v[pc].n<>v[i].n) then
		dtmp:=abs(v[pc].n-v[i].n)+min(v[pc].m+v[i].m,2*n-v[pc].m-v[i].m)+2
		else 
		dtmp:=abs(v[pc].m-v[i].m);
		if dtmp<dmin then
		begin dmin:=dtmp; nxt:=i; end;
	end;
	pc:=nxt;
	s[nxt]:=1;
	count:=count+1;
	delta:=delta+dmin;
end;	


begin
	assign(f,'magazin.in'); reset(f);
	assign(g,'magazin.out'); rewrite(g);
	readln(f,p,n,m,d);
	for i:=1 to p do
	begin
	s[i]:=0;
	readln(f,v[i].n,v[i].m);
	end;
	pc:=0;
	v[0].n:=0;v[0].m:=0;
	delta:=0;
	count:=0;
	while count<>p do
	cont;
	if v[pc].n<>n then
		delta:=delta+n-v[pc].n+v[pc].m+1
		else
		delta:=delta+v[pc].m;
	writeln(g,delta);
	close(f);
	close(g);
end.