Um viajante precisa ficar n dias em um hotel fora da cidade. Ele está sem dinheiro e seu cartão de crédito expirou. Mas ele tem uma corrente de ouro com n elos.
A regra neste hotel é que os residentes paguem o aluguel todas as manhãs. O viajante chega a um acordo com o gerente para pagar um elo da cadeia de ouro por dia. Mas o gerente também exige que o viajante cause o menor dano possível à cadeia e pague todos os dias. Em outras palavras, ele tem que encontrar uma solução para cortar o menor número possível de links.
Cortar um link cria três sub-cadeias: uma contendo apenas o link de corte e uma de cada lado. Por exemplo, cortar o terceiro elo de uma cadeia de comprimento 8 cria sub-cadeias de comprimento [2, 1, 5]. O gerente tem o prazer de fazer alterações, para que o viajante possa pagar o primeiro dia com a cadeia de comprimento 1, depois o segundo dia com a cadeia de comprimento 2, recuperando a primeira cadeia.
Seu código deve inserir o comprimento n e gerar uma lista de links para cortar no tamanho mínimo.
Regras :
- n é um número inteiro> 0.
- Você pode usar a indexação com base em 0 ou em 1 para os links.
- Para alguns números, a solução não é única. Por exemplo, se
n = 15
ambos[3, 8]
e[4, 8]
são saídas válidas. - Você pode retornar a lista ou imprimi-la com qualquer separador razoável.
- Isso é código-golfe , então o código mais curto em bytes vence.
Casos de teste :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
Exemplo detalhado
Para n = 15, cortar os links 3 e 8 resulta em sub-cadeias de comprimento [2, 1, 4, 1, 7]
. Esta é uma solução 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
Não existe solução com apenas um corte; portanto, essa é uma solução ideal.
Termo aditivo
Observe que esse problema está relacionado ao particionamento inteiro. Estamos à procura de uma partição P de n tal que todos os inteiros de 1 a n ter pelo menos um patition que é um subconjunto de P .
Aqui está um vídeo do YouTube sobre um possível algoritmo para esse problema.
1+2
. De onde veio a segunda cadeia de 2 elos?