记录编号 264817 评测结果 AAAAAAAAAA
题目名称 海明码 最终得分 100
用户昵称 Gravatar甘罗 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2016-05-30 20:20:26 内存使用 0.30 MiB
显示代码纯文本
/*
ID: zht82311
PROG: hamming
LANG: C++
*/
#include<cstdio>
#include<iostream>
using namespace std;

int i,n,d,b,maxn;
int a[110];
int z[520][10],l[520];

inline int max(int a,int b){return(a>b)?a:b;}

inline void zh(int q){
	int p=0;
	p=q;
	while (p!=0){
		z[q][++l[q]]=p%2;
		p/=2;}
	return;
}

inline bool bj(int p,int q){
	int i,sum=0;
	for (i=1;i<=max(l[p],l[q]);i++)
	if (z[p][i]!=z[q][i])	sum++;
	if (sum<d)	return false;	else
	return true;
}

inline bool work(int x){
	int i,j,k;
	zh(x);
	for (i=1;i<=a[0];i++)
	if (not bj(x,a[i]))	return false;
	return true;
}

inline void print(){
	int i,h=0;
	for (i=1;i<=a[0];i++){
		h++;
		if (h!=10&&i!=a[0])	printf("%d ",a[i]);	
		else {printf("%d\n",a[i]);	h=0;}	
		}
	return;
}

int main(){
	freopen("hamming.in","r",stdin);
	freopen("hamming.out","w",stdout);
	scanf("%d%d%d",&n,&b,&d);
	maxn=(1<<b)-1;
	a[++a[0]]=0;
	for (i=1;i<=maxn;i++){
		if (a[0]==n)	break;
		if (work(i))	a[++a[0]]=i;}
	print();
	return 0;
}