Pagini recente » Cod sursa (job #2186105) | Cod sursa (job #471841) | Cod sursa (job #13548) | Cod sursa (job #1583991) | Cod sursa (job #25351)
Cod sursa(job #25351)
var a,b,i,p,m,n,d:longint;
v:array[1..30000] of record min,max:integer; end;
s,j:array[1..30000] of integer;
procedure strategy1(i:integer;sus:boolean);
begin
if sus then
begin
if s[i+1]>s[i]+d+(m+2-v[i+1].min)*2 then
s[i+1]:=s[i]+d+(m+2-v[i+1].min)*2;
if j[i+1]>s[i]+d+m+1 then
j[i+1]:=s[i]+d+m+1;
end
else
begin
if j[i+1]>j[i]+d+v[i+1].max*2 then
j[i+1]:=j[i]+d+v[i+1].max*2;
if s[i+1]>j[i]+d+m+1 then
s[i+1]:=j[i]+d+m+1;
end
end;
procedure strategy2(i:integer;sus:boolean);
begin
if not sus then
begin
if s[i+2]>j[i]+d*4+(m+2)+2*(m+2-v[i+1].min) then
s[i+2]:=j[i]+d*4+(m+2)+2*(m+2-v[i+1].min)
end
else
if j[i+2]>s[i]+d*4+(m+2)+2*(v[i+1].max) then
j[i+2]:=s[i]+d*4+(m+2)+2*(v[i+1].max)
end;
procedure strategy3(i:integer;sus:boolean);
begin
if not sus then
begin
if s[i+2]>j[i]+d*4+(m+2)+2*(v[i+2].max) then
s[i+2]:=j[i]+d*4+(m+2)+2*(v[i+2].max)
end
else
if j[i+2]>s[i]+d*4+(m+2)+2*(m+2-v[i+2].min) then
j[i+2]:=s[i]+d*4+(m+2)+2*(m+2-v[i+2].min);
end;
begin
assign(input,'magazin.in');
reset(input);
readln(p,n,m,d);
for i:=1 to n do
begin
v[i].min:=m+2;
v[i].max:=0;
s[i]:=maxint;
j[i]:=maxint;
end;
j[1]:=0;
s[1]:=m+2;
for i:=1 to p do
begin
readln(a,b);
if v[a].min>b then
v[a].min:=b;
if v[a].max<b then
v[a].max:=b;
end;
for i:=1 to n do
begin
strategy1(i,true);
strategy1(i,false);
strategy2(i,true);
strategy2(i,false);
strategy3(i,true);
strategy3(i,false);
end;
assign(output,'magazin.out');
rewrite(output);
writeln(j[n]);
close(output);
end.