USACO 2.1.5 Hamming Codes

USACO 2.1.5 Hamming Codes

/**/ /*
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;
}

你可能感兴趣的:(USACO 2.1.5 Hamming Codes)