(思維)2493 二進位制距離之和

2021-09-20 13:05:04 字數 1605 閱讀 6482

2 秒262,144 kb

20 分

3 級題

小b有乙個陣列a,她想知道a中任意兩個數之間二進位制距離的總和。

兩個整數的二進位制距離指的是這兩個數字的二進位制數對應位不同的數量。

樣例解釋:

在二進位制表示中,4表示為0100,14表示為1110,2表示為0010。

4和14的距離為2,因為0100和1110只有右數第2,4位不同。其他同理。

所以答案為:

distance(4, 14) + distance(4, 2) + distance(14, 2) = 2 + 2 + 2 = 6.

收起

第一行輸入乙個正整數n,表示陣列a的長度;

第二行輸入a中元素,以空格隔開;

其中0<n≤10^4,a中任意元素a[i]滿足0≤a[i]≤10^9

輸出乙個數,表示二進位制距離之和
3

4 14 2

6
題解:用bitset 將其轉換成 0 1 串,總共有32位,每一位0的個數 * 1的個數 = 這一位對答案的貢獻值。

#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps (1e-8)

#define max 0x3f3f3f3f

#define u_max 1844674407370955161

#define l_max 9223372036854775807

#define i_max 2147483647

#define re register

#define pushup() tree[rt]=max(tree[rt<<1],tree[rt<<1|1])

#define nth(k,n) nth_element(a,a+k,a+n); // 將 第k大的放在k位

#define ko() for(int i=2;i<=n;i++) s=(s+k)%i // 約瑟夫

#define ok() v.erase(unique(v.begin(),v.end()),v.end()) // 排序,離散化

using namespace std;

inline int read()

while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}typedef long long ll;

const double pi = atan(1.)*4.;

const int m=1e3+5;

const int n=5e4+5;

int a[n];

ll x[35],y[35];

int main()

}ll ans=0;

for(int i=0;i<32;i++)

ans+=x[i]*y[i];

printf("%lld\n",ans);

return 0;

}

H Binary Median(思維,二進位制)

題意 有一堆二進位制數 01串,按字典序排序 從0到2m 1 我們刪除其中n n 100 個數,再輸出這些數的中位數。思路 二進位制的字典序排序其實和轉化成十進位制之後的順序是一樣的。我們先把刪除了的數轉化十進位制,然後sort一下,因為最多刪除100個數,我們把這一百個數當做分界,每次加乙個分界,...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...