随笔-141  评论-9  文章-3  trackbacks-0

/*
ID: lorelei3
TASK: hamming
LANG: C++
*/


#include 
<fstream>
#include 
<iostream>

using namespace std;

const int MAX = 0xFFF;

int N, B, D;
int mask = 0xFFFF;
int ans[MAX];
int count=0,num=0;

bool haming( int a,  int b){
    
int c = mask&(a^b);
    
int d=0;
    
for(int i=0; i<B; ++i)
        
if(c& 1<<i){
            d
++;
            
if(d>=D)
                
return true;
        }

    
return false;
}


bool check(int num){
    
for(int i=0; i<count; ++i){
        
if(!haming(num, ans[i]))
            
return false;
    }

    
return true;
}


int main(){

    ifstream 
in("hamming.in");
    ofstream 
out("hamming.out");

    
in>>N>>B>>D;

    ans[count
++]=0;
    num 
=1;

    
while(count<N){
        
if(check(num)){
            ans[count
++]=num;
        }

        num
++;
    }


    
char *sep=" ";
    
int ends=1;
    
for(int i=0; i<count; ++i){
        sep
=" ";
        
if(i==count-1 || ends==10){
            ends
=0;
            sep
="\n";
        }

        
out<<ans[i]<<sep;
        ends
++;
    }

    
return 0;
}
posted on 2010-11-21 00:47 小阮 阅读(354) 评论(0)  编辑 收藏 引用 所属分类: USACO

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理