P1461 海明碼 Hamming Codes
阿新 • • 發佈:2018-11-10
#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;
}