Podróżny musi zostać na n dni w hotelu poza miastem. Brakuje mu gotówki, a jego karta kredytowa wygasła. Ale ma złoty łańcuch z n ogniwami.
W tym hotelu obowiązuje zasada, że mieszkańcy powinni płacić czynsz każdego ranka. Podróżny dochodzi do porozumienia z menedżerem, aby płacić jedno ogniwo złotego łańcucha za każdy dzień. Ale menedżer wymaga również, aby podróżny wyrządzał jak najmniejsze szkody w łańcuchu, płacąc codziennie. Innymi słowy, musi znaleźć rozwiązanie, aby wyciąć jak najmniej linków.
Wycięcie linku tworzy trzy podłańcuchy: jeden zawierający tylko wycięty link i jeden z każdej strony. Na przykład przecięcie trzeciego ogniwa łańcucha o długości 8 tworzy podłańcuchy o długości [2, 1, 5]. Menedżer chętnie dokonuje zmian, aby podróżny mógł zapłacić pierwszego dnia łańcuchem długości 1, a następnie drugiego dnia łańcuchem długości 2, odzyskując pierwszy łańcuch.
Twój kod powinien wprowadzić długość n i wypisać listę linków do wycięcia o minimalnej długości.
Zasady :
- n jest liczbą całkowitą> 0.
- Możesz użyć indeksowania opartego na 0 lub 1 dla linków.
- W przypadku niektórych liczb rozwiązanie nie jest unikalne. Na przykład, jeśli
n = 15
obie[3, 8]
i[4, 8]
są ważne wyjścia. - Możesz albo zwrócić listę, albo wydrukować ją z dowolnym rozsądnym separatorem.
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach.
Przypadki testowe :
Input Output (1-indexed)
1 []
3 [1]
7 [3]
15 [3, 8]
149 [6, 17, 38, 79]
Szczegółowy przykład
Dla n = 15 przecięcie ogniw 3 i 8 powoduje utworzenie podłańcuchów długości [2, 1, 4, 1, 7]
. To prawidłowe rozwiązanie, ponieważ:
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
Nie ma rozwiązania z tylko jednym cięciem, więc jest to optymalne rozwiązanie.
Uzupełnienie
Zauważ, że ten problem dotyczy partycjonowania liczb całkowitych. Szukamy partycji P od n takie, że wszystkie liczby całkowite od 1 do n mają co najmniej jeden patition który jest podzbiorem P .
Oto film na YouTube o jednym możliwym algorytmie dla tego problemu.
1+2
. Skąd wziął się drugi 2-ogniwowy łańcuch?