P1461 海明码 Hamming Codes

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll ,ll > P;
#define INF 0xf3f3f3f
const int Max=int(1000+10);
int n,b,d,a[300];
bool judge(int x,int y) {
      int t=x^y;
      int ans=0;
	  while(t>0)
      {
      	if(t%2)
      	   ans++;
      	t>>=1;   
	  }
	  if(ans>=d)
	    return 1;
	 return 0;   
}
int main() {
	while(~scanf("%d%d%d",&n,&b,&d)) {
		int num=0;
		bool flag=0;
		for(int i=0; i<=(pow(2,b)-1); i++) {
			flag=0;        
			for(int j=1; j<=num; j++) 
                if(!judge(i,a[j]))
			        {
			        	flag=1;break;
					}
			
			if(!flag)
				{
					a[++num]=i;
					if(num==n)
					  break;
				}
			
		}
		for(int i=1;i<=num;i++)
		{	
			if(i%10==0||i==num)
			{
				printf("%d\n",a[i]);
				continue;
			}
			
			printf("%d ",a[i]);
		}
		
	}

	return 0;
}

https://www.luogu.org/problemnew/show/P1461

函数__builtin_popcount()它可以统计这个数转化为二进制数中一的个数,所以我们可以调用这个的函数

bool judge(int x,int y) {
      int ans=__builtin_popcount(x^y);
	  if(ans>=d)
	    return 1;
	 return 0;   
}

猜你喜欢

转载自blog.csdn.net/PinkAir/article/details/81568313