日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))

發布時間:2023/12/15 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n)) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
給出 N,B 和 D,要求找出 N 個由0或1組成的編碼(1 <= N <= 64),每個編碼有 B 位(1 <= B <= 8),使得兩兩編碼之間至少有 D 個單位的“Hamming距離”(1 <= D <= 7)?!癏amming距離”是指對于兩個編碼,他們二進制表示法中的不同二進制位的數目。看下面的兩個編碼 0x554 和 0x234(0x554和0x234分別表示兩個十六進制數)

0x554 = 0101 0101 0100
0x234 = 0010 0011 0100
不同位 xxx xx
因為有五個位不同,所以“Hamming距離”是 5。

輸入輸出格式
輸入格式:
一行,包括 N, B, D。

輸出格式:
N 個編碼(用十進制表示),要排序,十個一行。如果有多解,你的程序要輸出這樣的解:假如把它化為2^B進制數,它的值要最小。

輸入輸出樣例
輸入樣例#1:
16 7 3
輸出樣例#1:
0 7 25 30 42 45 51 52 75 76
82 85 97 102 120 127
說明
請解釋:“必須與其他所有的數相比,Hamming距離都符合要求,這個數才正確”

答:如樣例輸出,0和7,0和25,0和……比較都符合海明碼,同樣7和25,7和30,7和……比較也符合要求,以此類推。 就這樣了。 題中至少有D個單位,意思就是大于等于D個單位的都可以。

USACO 2.1

翻譯來自NOCOW
__builtin_popcount(n)計算二進制編碼中1的個數
自己手寫也行,懶

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> using namespace std; const int maxn=70; int n,b,d,ans[maxn],len=1; int main() {cin>>n>>b>>d;ans[len]=0;int i=1;while(len<n){bool flag=false;for(int j=len;j>=1;j--)if(__builtin_popcount(ans[j]^i)<d)//和之前的每一個數都要比較{flag=true;break;}if(!flag){len++;ans[len]=i;}i++;}for(i=1;i<=len;i++){cout<<ans[i]<<' ';if(i%10==0)cout<<endl;}return 0; }

總結

以上是生活随笔為你收集整理的USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。