单点时限: 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:
等),然后在一行中输出排序后的数。格式为:以一个空格分隔每两个数。
3 1 1234 5 100 15 0 30 7 10 1 1 3 4 5 6 -7 -8 1234567 10000000
case #0: 1234 case #1: 15 30 7 100 0 case #2: -7 -8 1234567 10000000 3 5 6 1 1 4