记录编号 |
264817 |
评测结果 |
AAAAAAAAAA |
题目名称 |
海明码 |
最终得分 |
100 |
用户昵称 |
甘罗 |
是否通过 |
通过 |
代码语言 |
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;
}