hamming.cpp

来自「USACO chapter two.Useful for beginners.」· C++ 代码 · 共 77 行

CPP
77
字号
/*
ID: chenkai4
PROG: hamming
LANG: C++
*/
#include <stdio.h>
#include <iostream>
using namespace std;

int N,B,D;int now=1;
int nums[65]={0};

int power2(int n)
{
	int answer=1;
	for(int a=1;a<=n;a++)
		answer*=2;
	return answer;
}

struct _int
{
	int l,b[9];
	_int(int n=0)
	{
		l=0;memset(b,0,sizeof(b));
		while(n)
		{
			b[l++]=n%2;
			n/=2;
			if(b[l])l++;
		}
	}
};

int himindis(int how,int index)
{
	_int i1(how);
	_int i2(nums[index]);
	int answer=0;
	for(int a=0;a<B;a++)
		answer+=(i1.b[a]!=i2.b[a]);
	return answer;
}

bool check(int how)
{
	for(int a=1;a<=now;a++)
		if(himindis(how,a)<D)
			return false;
	return true;
}
int main()
{
	freopen("hamming.in","r",stdin);
	freopen("hamming.out","w",stdout);
	scanf("%d%d%d",&N,&B,&D);
	nums[1]=0;
	for(int a=1;a<=power2(B);a++)
	{
		if(check(a))
			nums[++now]=a;
		if(now==N)
			break;
	}
	for(int a=1;a<=N;a++)
	{
		if((a-1)%10==0)
			printf("%d",nums[a]);
		else
			printf(" %d",nums[a]);
		if(a%10==0||a==N)
			printf("\n");
	}

	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?