#P413. CSP-J 2020 優秀的拆分

CSP-J 2020 優秀的拆分

題目描述

一般來說,一個正整數可以拆分成若干個正整數的和。

例如,1 = 1,10 = 1 + 2 + 3 + 4 等。對於正整數n的一種特定拆分,我們稱它為"優秀的",當且僅當在這種拆分下,n被分解為了若干個不同的2的正整數次幂。注意,一個數x能被表示成2的正整數次幂,當且僅當x能通過正整數個2相乘在一起得到。

例如,10 = 8 + 2 = 23 + 21 是一個優秀的拆分。但是,7 = 4 + 2 + 1 = 22 + 21 + 20 就不是一個優秀的拆分,因為1不是2的正整數次幂。

現在,給定正整數n,你需要判斷這個數的所有拆分中,是否存在優秀的拆分。若存在,請你給出具體的拆分方案。

輸入格式

輸入只有一行,一個正整數n,代表需要判斷的數。( 0 < n < 107 )

輸出格式

如果這個數的所有拆分中,存在優秀的拆分。那麼,你需要從大到小輸出這個拆分中的每一個數,相鄰兩個數之間用一個空格隔開。可以証明,在規定了拆分數字的順序後,該拆分方案是唯一的。

若不存在優秀的拆分,輸出「-1」。

Samples

["6","7"]
["4 2","-1"]

提示

6 = 4 + 2 = 22 + 21 是一個優秀的拆分。注意,6 = 2 + 2 + 2 不是一個優秀的拆分,因為拆分成的3個數不滿足每個數互不相同。

原始資料

  • Zero1 題號:a413
  • Hydro 題號:Z0413
  • Locale:zh_TW
  • Display:practice