#569. 海明码 Hamming Codes

海明码 Hamming Codes

题目描述

给出 N\red{N}B\red{B}D\red{D},要求找出 N\red{N} 个由0\red{0}1\red{1}组成的编码1<=N<=64\red{(1 <= N <= 64)},每个编码有 B\red{B}1<=B<=8\red{(1 <= B <= 8)},使得两两编码之间至少有 D\red{D} 个单位的“Hamming\red{Hamming}距离”1<=D<=7\red{(1 <= D <= 7)}

Hamming\red{Hamming}距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目。看下面的两个编码 0x554\red{0x554}0x234\red{0x234}0x554\red{0x554}0x234\red{0x234}分别表示两个十六进制数):

0x554 = 0101 0101 0100\red{0x554\ =\ 0101\ 0101\ 0100}

0x234 = 0010 0011 0100\red{0x234\ =\ 0010\ 0011\ 0100}

不同位          xxx  xx\red{\ \ \ \ \ \ \ \ \ \ xxx\ \ xx}

因为有五个位不同,所以“Hamming\red{Hamming}距离”是 5\red{5}

输入格式

一行,包括 N,B,D\red{N, B, D}

输出格式

N\red{N} 个编码(用十进制表示),要排序,十个一行。如果有多解,你的程序要输出这样的解:假如把它化为2\red{2}进制数,它的值要最小。

样例

输入样例

16 7 3

输出样例

0 7 25 30 42 45 51 52 75 76
82 85 97 102 120 127

提示

对于 100%\red{100\%} 的数据,1n641b81d7\red{1≤n≤64,1≤b≤8,1≤d≤7}

请解释:“必须与其他所有的数相比,Hamming\red{Hamming} 距离都符合要求,这个数才正确”

答:如样例输出,0,70,25\red{0,7,0,25},比较都符合海明码,同样 7,257,30\red{7,25,7,30},比较也符合要求,以此类推。题中至少有 d\red{d} 个单位,意思就是大于等于 d\red{d} 个单位的都可以。