P15345 [TOIP 2025] 連序

Description

一個非負整數的二進位表示可視為一 $01$ 字串,左邊為高位(most significant bit),右邊為低位(least significant bit);若最多有 $k$ 個連續的位元為 $1$,則稱該數字的「連序」為 $k$。今給定 $n$ 個非負整數,請依它們的「連序」由小而大排序;若兩數字的連序相同,則先輸出數值較小的。 舉例來說,$7$、$12$、$27$ 的二進位表示分為別 ${\left(111\right)}_2$、${\left(1100\right)}_2$、${\left(11011\right)}_2$,可知三數的連序分別為 $3$、$2$、$2$,其中 $12$ 與 $27$ 的連序相同,但 $12 < 27$,故需依序輸出 $12$、$27$、$7$。

Input Format

$$ \begin{aligned} &n \\ &a_1 \; a_2 \; a_3 \; \cdots \; a_n \end{aligned} $$ * $n$ 代表欲排序的數字個數。 * $a_i$ 代表第 $i$ 個欲排序的數字。

Output Format

$$ \begin{aligned} &s_1 \; s_2 \; s_3 \; \cdots \; s_n \end{aligned} $$ * $s_i$ 代表依照題目要求排序後的第 $i$ 個數字。

Explanation/Hint

### 測資限制 * $1 \le n \le 2 \times {10}^5$。 * $0 \le a_i < 2^{30}$。 * 所有輸入的數皆為整數。 ### 評分說明 本題共有四組子任務,條件限制如下所示。每一組可有一或多筆測試資料,該組所有測試資料皆需答對才會獲得該組分數。 | 子任務 | 分數 | 額外輸入限制 | | :------: | :----: | ------------ | | 1 | 22 | $n \le 2,\ a_i < 16$。 | | 2 | 22 | $n \le 2\,000,\ a_i < 2^{16}$。 | | 3 | 26 | $a_i < 2^{16}$。 | | 4 | 30 | 無額外限制。 |