Su una linea numerica di lunghezza M
, dove 0 < M <= 1,000,000,000
, hai dato N
( 1 < N <= 100,000
) coppie intere di punti. In ciascuna coppia, il primo punto rappresenta dove si trova attualmente un oggetto e il secondo punto rappresenta dove dovrebbe essere spostato un oggetto. (Tieni presente che il second
punto potrebbe essere più piccolo del first
).
Ora, supponi di iniziare dal punto 0
e di avere un carrello che può contenere 1
oggetti. Volete spostare tutti gli oggetti dalle loro posizioni iniziali alle rispettive posizioni finali mentre percorrete la minima distanza lungo la linea numerica ( non spostamento). Devi finire sul punto M
.
Ora, ho cercato di ridurre questo problema a un problema più semplice. Ad essere sincero, non riesco nemmeno a pensare a una soluzione di forza bruta ( forse avida). Tuttavia, il mio primo pensiero è stato di degenerare un movimento all'indietro in due movimenti in avanti, ma ciò non sembra funzionare in tutti i casi.
Ho disegnato questi 3
esempi di casi di prova qui:
La risposta al primo testcase è 12
. Innanzitutto, raccogli l' red
oggetto al punto 0
. Quindi vai al punto 6
(distanza = 6
), rilascia l' red
oggetto temporaneamente, quindi raccogli l' green
oggetto. Quindi si passa al punto 5
(distanza = 1
) e si rilascia l' green
oggetto. Quindi torni al punto 6
(distanza = 1
) e raccogli l' red
oggetto che hai lasciato cadere, passa al punto 9 (distanza = 3
), quindi passa al punto 10
(distanza = 1
) per completare la sequenza.
La distanza totale percorsa era 6 + 1 + 1 + 3 + 1 = 12
, che è la distanza minima possibile.
Gli altri due casi hanno risposte 12
, credo. Tuttavia, non riesco a trovare una regola generale per risolverlo.
Qualcuno ha qualche idea?