{
Author:wzx961008
Problem:JSOI 2008-help
Verdict:Accepted
Language:PASCAL
Run Time:0.200s
AC Date:2011-4-9
}
const oo= maxlongint;
type point= record
x, y: longint ;
end ;
stage= record
l, r, h: longint ;
end ;
var left, right: array [ 0 .. 1000 ] of qword;
stages: array [ 0 .. 1000 ] of stage;
i, j, stage_num, max_drop: longint ;
start: point;
b: boolean ;
function min( a, b: qword) : qword;
begin
if a<b then exit( a)
else exit( b) ;
end ;
procedure qsort( l, r: longint ) ;
var s: stage;
i, j, m: longint ;
begin
i: = l; j: = r; m: = stages[ ( l+ r) >>1 ] . h ;
repeat
while stages[ i] . h >m do inc( i) ;
while stages[ j] . h <m do dec( j) ;
if i<= j then begin
s: = stages[ i] ; stages[ i] : = stages[ j] ; stages[ j] : = s;
inc( i) ; dec( j) ;
end ;
until i>j;
if l<j then qsort( l, j) ;
if i<r then qsort( i, r) ;
end ;
begin
readln ( stage_num, start. x , start. y , max_drop) ;
for i: = 1 to stage_num do
with stages[ i] do
readln ( l, r, h) ;
qsort( 1 , stage_num) ;
stages[ 0 ] . l : = start. x ; stages[ 0 ] . r : = start. x ; stages[ 0 ] . h : = start. y ;
for i: = stage_num downto 0 do begin
b: = true ;
for j: = i+ 1 to stage_num do
if ( stages[ i] . l >= stages[ j] . l ) and ( stages[ i] . l <= stages[ j] . r ) then begin
b: = false ;
if stages[ i] . h - stages[ j] . h <= max_drop then left[ i] : = min( left[ j] + ( stages[ i] . l - stages[ j] . l ) , right[ j] + ( stages[ j] . r - stages[ i] . l ) )
else left[ i] : = oo;
break ;
end ;
if b then
if stages[ i] . h <= max_drop then left[ i] : = 0
else left[ i] : = oo;
b: = true ;
for j: = i+ 1 to stage_num do
if ( stages[ i] . r >= stages[ j] . l ) and ( stages[ i] . r <= stages[ j] . r ) then begin
b: = false ;
if stages[ i] . h - stages[ j] . h <= max_drop then right[ i] : = min( left[ j] + ( stages[ i] . r - stages[ j] . l ) , right[ j] + ( stages[ j] . r - stages[ i] . r ) )
else right[ i] : = oo;
break ;
end ;
if b then
if stages[ i] . h <max_drop then right[ i] : = 0
else right[ i] : = oo;
end ;
if min( left[ 0 ] , right[ 0 ] ) + start. y <oo then writeln ( min( left[ 0 ] , right[ 0 ] ) + start. y )
else writeln ( - 1 ) ;
end .
ewogQXV0aG9yOnd6eDk2MTAwOAogUHJvYmxlbTpKU09JIDIwMDgtaGVscAogVmVyZGljdDpBY2NlcHRlZAogTGFuZ3VhZ2U6UEFTQ0FMCiBSdW4gVGltZTowLjIwMHMKIEFDIERhdGU6MjAxMS00LTkKfQpjb25zdCBvbz1tYXhsb25naW50Owp0eXBlIHBvaW50PXJlY29yZAogICAgICB4LHk6bG9uZ2ludDsKICAgICBlbmQ7CiAgICAgc3RhZ2U9cmVjb3JkCiAgICAgIGwscixoOmxvbmdpbnQ7CiAgICAgZW5kOwp2YXIgbGVmdCxyaWdodDphcnJheVswLi4xMDAwXW9mIHF3b3JkOwogICAgc3RhZ2VzOmFycmF5WzAuLjEwMDBdb2Ygc3RhZ2U7CiAgICBpLGosc3RhZ2VfbnVtLG1heF9kcm9wOmxvbmdpbnQ7CiAgICBzdGFydDpwb2ludDsKICAgIGI6Ym9vbGVhbjsKZnVuY3Rpb24gbWluKGEsYjpxd29yZCk6cXdvcmQ7CmJlZ2luCiBpZiBhPGIgdGhlbiBleGl0KGEpCiAgICAgICAgZWxzZSBleGl0KGIpOwplbmQ7CnByb2NlZHVyZSBxc29ydChsLHI6bG9uZ2ludCk7CnZhciBzOnN0YWdlOwogICAgaSxqLG06bG9uZ2ludDsKYmVnaW4KIGk6PWw7IGo6PXI7IG06PXN0YWdlc1sobCtyKT4+MV0uaDsKIHJlcGVhdAogIHdoaWxlIHN0YWdlc1tpXS5oPm0gZG8gaW5jKGkpOwogIHdoaWxlIHN0YWdlc1tqXS5oPG0gZG8gZGVjKGopOwogIGlmIGk8PWogdGhlbiBiZWdpbgogICBzOj1zdGFnZXNbaV07IHN0YWdlc1tpXTo9c3RhZ2VzW2pdOyBzdGFnZXNbal06PXM7CiAgIGluYyhpKTsgZGVjKGopOwogIGVuZDsKIHVudGlsIGk+ajsKIGlmIGw8aiB0aGVuIHFzb3J0KGwsaik7CiBpZiBpPHIgdGhlbiBxc29ydChpLHIpOwplbmQ7CmJlZ2luCiByZWFkbG4oc3RhZ2VfbnVtLHN0YXJ0Lngsc3RhcnQueSxtYXhfZHJvcCk7CiBmb3IgaTo9MSB0byBzdGFnZV9udW0gZG8KICB3aXRoIHN0YWdlc1tpXSBkbwogICByZWFkbG4obCxyLGgpOwogcXNvcnQoMSxzdGFnZV9udW0pOwogc3RhZ2VzWzBdLmw6PXN0YXJ0Lng7IHN0YWdlc1swXS5yOj1zdGFydC54OyBzdGFnZXNbMF0uaDo9c3RhcnQueTsKIGZvciBpOj1zdGFnZV9udW0gZG93bnRvIDAgZG8gYmVnaW4KICBiOj10cnVlOwogIGZvciBqOj1pKzEgdG8gc3RhZ2VfbnVtIGRvCiAgIGlmIChzdGFnZXNbaV0ubD49c3RhZ2VzW2pdLmwpYW5kKHN0YWdlc1tpXS5sPD1zdGFnZXNbal0ucikgdGhlbiBiZWdpbgogICAgYjo9ZmFsc2U7CiAgICBpZiBzdGFnZXNbaV0uaC1zdGFnZXNbal0uaDw9bWF4X2Ryb3AgdGhlbiBsZWZ0W2ldOj1taW4obGVmdFtqXSsoc3RhZ2VzW2ldLmwtc3RhZ2VzW2pdLmwpLHJpZ2h0W2pdKyhzdGFnZXNbal0uci1zdGFnZXNbaV0ubCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBsZWZ0W2ldOj1vbzsKICAgIGJyZWFrOwogICBlbmQ7CiAgaWYgYiB0aGVuCiAgIGlmIHN0YWdlc1tpXS5oPD1tYXhfZHJvcCB0aGVuIGxlZnRbaV06PTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGVmdFtpXTo9b287CiAgYjo9dHJ1ZTsKICBmb3Igajo9aSsxIHRvIHN0YWdlX251bSBkbwogICBpZiAoc3RhZ2VzW2ldLnI+PXN0YWdlc1tqXS5sKWFuZChzdGFnZXNbaV0ucjw9c3RhZ2VzW2pdLnIpIHRoZW4gYmVnaW4KICAgIGI6PWZhbHNlOwogICAgaWYgc3RhZ2VzW2ldLmgtc3RhZ2VzW2pdLmg8PW1heF9kcm9wIHRoZW4gcmlnaHRbaV06PW1pbihsZWZ0W2pdKyhzdGFnZXNbaV0uci1zdGFnZXNbal0ubCkscmlnaHRbal0rKHN0YWdlc1tqXS5yLXN0YWdlc1tpXS5yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJpZ2h0W2ldOj1vbzsKICAgIGJyZWFrOwogICBlbmQ7CiAgaWYgYiB0aGVuCiAgIGlmIHN0YWdlc1tpXS5oPG1heF9kcm9wIHRoZW4gcmlnaHRbaV06PTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByaWdodFtpXTo9b287CiBlbmQ7CiBpZiBtaW4obGVmdFswXSxyaWdodFswXSkrc3RhcnQueTxvbyB0aGVuIHdyaXRlbG4obWluKGxlZnRbMF0scmlnaHRbMF0pK3N0YXJ0LnkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdyaXRlbG4oLTEpOwplbmQu
compilation info
Free Pascal Compiler version 2.2.0 [2009/11/16] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
Target OS: Linux for i386
Compiling prog.pas
prog.pas(54,67) Warning: Variable "left" does not seem to be initialized
prog.pas(54,102) Warning: Variable "right" does not seem to be initialized
Linking prog
74 lines compiled, 0.0 sec
2 warning(s) issued
stdout