usaco Hamming Codes
生活随笔
收集整理的這篇文章主要介紹了
usaco Hamming Codes
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
就是在二進(jìn)制上的枚舉,B位的意思就是十進(jìn)制不超過1<<B,數(shù)字很小枚舉即可每枚舉一個(gè)跟前面的進(jìn)行比較看符不符合題意,就是進(jìn)行按位異或然后統(tǒng)計(jì)其中1的個(gè)數(shù)大于等于D就符合題意。
/*
ID:jinbo wu
LANG: C++
TASK: hamming
*/
#include<bits/stdc++.h>
using namespace std;
int a[500];
int n,b,d,maxn;
bool check(int m,int k)
{int temp=m^k;int cnt=0;while(temp){if(temp&1) cnt++;temp>>=1;}if(cnt>=d)return true;return false;
}
bool can(int m,int k)
{for(int i=1;i<k;i++){if(!check(m,a[i]))return false;}return true;
}
void dfs(int cnt,int m)
{if(cnt==n){a[cnt]=m;return;}a[cnt]=m;for(int i=m+1;i<=maxn;i++){if(can(i,cnt+1)){dfs(cnt+1,i);break;}}
}
int main()
{freopen("hamming.in","r",stdin);freopen("hamming.out","w",stdout); scanf("%d %d %d",&n,&b,&d);maxn=1<<b;dfs(1,0);int l=1;int temp=n;while(temp){for(int i=1;i<min(temp,10);i++){printf("%d ",a[l++]);}printf("%d\n",a[l++]);temp-=min(temp,10);}
}
總結(jié)
以上是生活随笔為你收集整理的usaco Hamming Codes的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个社会个性签名。
- 下一篇: ccf 高速公路(顺便当tarjan