傳送門: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≤1e50≤ 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 ...