Mistrzostwa Polski Szkół Średnich w Programowaniu Zespołowym 2024
Problem description
Ola (znana z piątego sparingu w dywizji trudniejszej) powraca! Ponownie zainteresowana jest ciągami Fibonacciego. Tym razem jednak chodzi jej o liczby (a nie słowa) Fibonacciego. Chciałaby przedstawić swoją ulubioną liczbę N w postaci sumy dokładnie K (niekoniecznie różnych) liczb Fibonacciego. Pomóż jej!
Napisz program, który: wczyta N oraz K, wyznaczy pewne przedstawienie liczby N w postaci sumy dokładnie K liczb Fibonacciego i wypisze wynik na standardowe wyjście.
Wejście
W pierwszym (jedynym) wierszu wejścia znajdują się dwie liczby naturalne N oraz K, oddzielone pojedynczym odstępem i określające kolejno: ulubioną liczbę Oli oraz liczbę składników, na które ma ona być rozbita.
Wyjście
W pierwszym (i jedynym) wierszu wyjścia należy wypisać ciąg K liczb ciągu Fibonacciego
pooddzielanych pojedynczymi odstępami, których suma jest równa N. Jeśli taki ciąg nie istnieje –
zamiast tego należy wypisać tylko jedno słowo NIE
.
Liczby ciągu mogą być wypisane w dowolnej kolejności. Jeśli istnieje wiele możliwych rozwiązań – należy wypisać dowolne z nich.
Uwaga
Ciąg Fibonacciego w tym zadaniu jest definiowany następująco: F0 = F1 = 1, Fn = Fn − 1 + Fn − 2 (dla n ≥ 2).
Ograniczenia
1 ≤ N ≤ 1018, 1 ≤ K ≤ 100 000.
Przykład
Input | Output | Explanation |
|
|
Rozwiązania w tym przypadku to rozbicia: 10 = 8 + 1 + 1 lub 10 = 5 + 3 + 2. |