牛客練習賽60 A 大吉大利 思維

2021-10-04 12:50:07 字數 1462 閱讀 1381

傳送門:a-大吉大利.

題目描述

給定n個整數,依次為a1 ,a2​,…,an。

求∑ i=

1n∑j

=1n(

ai&a

j)

\sum_^n\sum_^n(a_i\&a_j)

∑i=1n​

∑j=1

n​(a

i​&a

j​)。「&」是二進位制的與運算子。

輸入描述:

第一行乙個整數n.

第二行nn個整數 ai.

輸出描述:

乙個整數表示上述求和式的答案.

示例1

輸入

512

345

輸出

33
備註:

1≤n≤1e5

0≤ ai ≤1e8

解題思路:

因為資料過大,暴力的做法時間複雜度為 o(n2),一定會超時。

我們考慮邏輯與運算的規則:同 1 為 1 ,其他都是 0 。我們將每個數都看為二進位制的形式,兩個數相與的貢獻是:同乙個數字上都是 1 才有貢獻,結果就是 1*該位置二進位制的係數。

那麼 n 個數兩兩相與的和的結果就應該是在二進位制下這一位在n個數**現的次數(為 1 的次數)的平方乘上二進位制的係數。

ac**:

#include

#include

#include

#include

#define ll long long

#define inf 0x3f3f3f3f

using

namespace std;

const

int n=

1e5+10;

int n;

int a[n]

;int sum[n]

;ll f[50]

;//二進位制係數

void

count

(int num)

//計算二進位制每位 1 的次數

}int

main()

ll ans=0;

for(

int i=

0;i<

50;i++

)printf

("%lld\n"

,ans)

;return0;

}

牛客練習賽60 A 大吉大利(位運算)

給定 n nn 個整數,依次為 a1,a2,a na 1,a 2,a n a1 a2 an 求 i 1 n j 1n a i aj sum n sum n a i a j i 1n j 1 n a i a j katex parse error expected eof got at positio...

牛客練習賽60 A 大吉大利 簽到 位運算

題目鏈結 click 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 給定n個整數,依次為a1,a2,an。求 i 1n j 1n ai a j sum n sum n a i a j i 1 n j ...

牛客練習賽60補題

思路 考慮位運算 的特性 只有兩者都為1才會對答案有貢獻 且 對答案貢獻的值為 1 k 其中k是當前1所在二進位制下的位數 所以考慮預處理每乙個位的1出現的次數 其中對每一位都會遍歷n n次 所以每一位對答案的貢獻就是 a i a i 1 i a i 為當前位置1的個數 include using ...