Zoznam úloh

2. Zobudená programátorka

Kolo už skončilo. Môžeš si pozrieť vzorové riešenie.

Kamila má rada kávu. Rokmi pokusov zistila presný objem kávy, pri ktorom sa jej pracuje najlepšie. Dnes sa dozvedela, že má náročnú domácu úlohu, ktorú treba rýchlo odovzdať, a potrebuje sa posilniť. Zamierila teda ku svojej zbierke výberových káv. Kávy v zbierke sú uskladnené v rôzne veľkých vrecúškach: každé vrecúško je dvakrát väčšie ako to pred ním, počínajúc vrecúškom s hmotnosťou 1 gram. To znamená, že v zbierke má vrecúška s váhami $$1, 2, 4, 8, \dots, 2^n$$ gramov. Ako v každej správnej zbierke, aj v tej Kamilinej je vrecúško každej veľkosti práve raz.

Ktoré vrecúčka má Kamila vybrať aby dosiahla svoju vytúženú hladinu kofeínu?

Úloha

Na vstupe dostanete $$n$$ – potrebnú hmotnosť kávy a máte zistiť, ktoré z vrecúšok má Kamila zobrať, ak chce mať presne $$n$$ gramov kávy.

Formát vstupu

Vstup má jeden riadok a v ňom jedno celé číslo $$n$$. Môžte predpokladať, že $$1 \leq n \leq 10^{18}$$.

Upozornenie

Dajte si pozor na to, že váš program musí pracovať aj s hodnotami, ktoré sa nezmestia do bežnej (32-bitovej) celočíselnej premennej. Na ich uloženie potrebujete použiť premennú s dostatočne veľkým rozsahom – napríklad int64 v Pascale alebo long long v C++.

Takisto si dajte pozor, že súčin dvoch 32-bitových premenných vráti 32-bitové číslo bez ohľadu na to, či sa tam výsledok zmestí. T.j. x := 1000000 * 1000000 uloží do x hodnotu 1420103680 bez ohľadu na to, či x je int64 alebo longint.

Formát výstupu

Vypíšte jediný riadok a v ňom použité vrecúška oddelené medzerou v poradí od najmenšieho po najväčšie.

Nezabudnite ukončiť riadok znakom konca riadku. Teda napríklad v Pascale vypíšte výsledok volaním writeln(vysledok), v C++ zase volaním cout << vysledok << endl.

Príklad

Input:

20

Output:

4 16

Input:

35

Output:

1 2 32
Pre odovzdávanie sa musíš prihlásiť.
Trojsten

Korešpondenčný seminár z programovania zastrešuje občianske združenie Trojsten.

Kontakt
Ďalšie projekty