3036. 按数据中1的位数排序

单点时限: 2.0 sec

内存限制: 256 MB

所有数据在内存中都是以二进制形式存放的,其中有一些位是 $1$,而另一些位是 $0$。

例如,整数 $100$ 的二进制表示为 $1100100$,其中 $1$ 的位数是 $3$;整数 $15$ 的二进制表示为 $1111$,其中 $1$ 的位数是 $4$;整数$-15$ 的 $64$ 位二进制表示为 $1111111111111111111111111111111111111111111111111111111111110001$,其中 $1$ 的位数是$ 61$。

现在有 $N$ 个整数,要求按照 $64 $位二进制补码表示中 $1$ 的位数从大到小进行排序。若两个数的二进制表示中 $1$ 的位数相同,则按照数本身值由小到大排序。

例如:数 $100,15,0,30,7,-15,100,-100$ 排序后的结果为 :

$-15,-100,15,30,7,100,100,0$。

输入格式

第 $1$ 行:整数 $T$ ($1 \le T \le 10$) 为问题数

第 $2$ 行:第一个问题中的 $N$($1\le N\le 10000$)

第 $3$ 行:$N$ 个待排序的数 ($-10^{18}\le 数 \le 10^{18}$),每两个数之间由一个空格分隔。

第 $4$ ~$T\times 2+1$ 行:后面问题的数据,格式与第一个问题相同。

输出格式

对于每个问题,输出一行问题的编号($0$ 开始编号,格式:case #0: 等),然后在一行中输出排序后的数。格式为:以一个空格分隔每两个数。

样例

Input
3
1
1234
5
100 15 0 30 7
10
1 1 3 4 5 6 -7 -8 1234567 10000000
Output
case #0:
1234
case #1:
15 30 7 100 0
case #2:
-7 -8 1234567 10000000 3 5 6 1 1 4

1488 人解决,1900 人已尝试。

2411 份提交通过,共有 11568 份提交。

1.7 EMB 奖励。

创建: 10 年,7 月前.

修改: 6 年,3 月前.

最后提交: 1 周,2 天前.

来源: 2014年编程实践课程第三次上机考试