Un viajero debe permanecer durante n días en un hotel fuera de la ciudad. No tiene efectivo y su tarjeta de crédito está vencida. Pero tiene una cadena de oro con n eslabones.
La regla en este hotel es que los residentes deben pagar el alquiler todas las mañanas. El viajero llega a un acuerdo con el gerente para pagar un eslabón de la cadena de oro por cada día. Pero el gerente también exige que el viajero haga el menor daño posible a la cadena mientras paga todos los días. En otras palabras, tiene que encontrar una solución para cortar la menor cantidad de enlaces posible.
Cortar un enlace crea tres subcadenas: una que contiene solo el enlace cortado y una a cada lado. Por ejemplo, cortar el tercer eslabón de una cadena de longitud 8 crea subcadenas de longitud [2, 1, 5]. El gerente se complace en hacer cambios, por lo que el viajero puede pagar el primer día con la cadena de longitud 1, luego el segundo día con la cadena de longitud 2, recuperando la primera cadena.
Su código debe ingresar la longitud n , y generar una lista de enlaces para cortar de longitud mínima.
reglas :
- norte es un entero> 0.
- Puede utilizar la indexación basada en 0 o en 1 para los enlaces.
- Para algunos números, la solución no es única. Por ejemplo, si
n = 15
ambos[3, 8]
y[4, 8]
son salidas válidas. - Puede devolver la lista o imprimirla con cualquier separador razonable.
- Este es el código de golf , por lo que gana el código más corto en bytes.
Casos de prueba :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
Ejemplo detallado
Para n = 15, cortar los enlaces 3 y 8 da como resultado subcadenas de longitud [2, 1, 4, 1, 7]
. Esta es una solución válida porque:
1 = 1
2 = 2
3 = 1+2
4 = 4
5 = 1+4
6 = 2+4
7 = 7
8 = 1+7
9 = 2+7
10 = 1+2+7
11 = 4+7
12 = 1+4+7
13 = 2+4+7
14 = 1+2+4+7
15 = 1+1+2+4+7
No existe una solución con un solo corte, por lo que esta es una solución óptima.
Apéndice
Tenga en cuenta que este problema está relacionado con la partición de enteros. Estamos buscando una partición P de n tal que todos los enteros del 1 al n tengan al menos una patición que sea un subconjunto de P .
Aquí hay un video de YouTube sobre un posible algoritmo para este problema.
1+2
. ¿De dónde vino la segunda cadena de 2 eslabones?