Pagini recente » Cod sursa (job #1142597) | Cod sursa (job #1659535) | Cod sursa (job #2919638) | Cod sursa (job #2472135) | Cod sursa (job #25374)
Cod sursa(job #25374)
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.