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