日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)。“Hamming距離”是指對于兩個編碼,他們二進制表示法中的不同二進制位的數目。看下面的兩個編碼 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))的全部內容,希望文章能夠幫你解決所遇到的問題。

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