-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDifferentBitsSumPairWise.cpp
More file actions
40 lines (33 loc) · 982 Bytes
/
DifferentBitsSumPairWise.cpp
File metadata and controls
40 lines (33 loc) · 982 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
Question:
Different Bits Sum Pairwise
Asked in:
Google
We define f(X, Y) as number of different corresponding bits in binary representation of X and Y. For example, f(2, 7) = 2, since binary representation of 2 and 7 are 010 and 111, respectively. The first and the third bit differ, so f(2, 7) = 2.
You are given an array of N positive integers, A1, A2 ,…, AN. Find sum of f(Ai, Aj) for all pairs (i, j) such that 1 ≤ i, j ≤ N. Return the answer modulo 109+7.
For example,
A=[1, 3, 5]
We return
f(1, 1) + f(1, 3) + f(1, 5) +
f(3, 1) + f(3, 3) + f(3, 5) +
f(5, 1) + f(5, 3) + f(5, 5) =
0 + 1 + 1 +
1 + 0 + 2 +
1 + 2 + 0 = 8
Seen this que
*/
int Solution::cntBits(vector<int> &A) {
long ans=0,mod=1000000007;
for(int i=0;i<=31;i++)
{
long c=0;
for(int j=0;j<A.size();j++)
{
if((A[j]) & (1<<i))
c++;
}
ans+=((c%mod)*((A.size()-c)%mod)*2)%mod;
ans=ans%mod;
}
return ans;
}