ABC
D
XOR
ABC147 D - Xor Sum 4
https://atcoder.jp/contests/abc147/tasks/abc147_d (opens in a new tab)
水色上位。XOR
POINT XOR は桁ごとに 基本演算
入力例 1 は、
各桁ごとに見るため、 と と個別にチェックする。 このとき題意の は任意の 2 点間の XOR の総和を求めており、これは各桁に含まれる(0 の個数)と(1 の個数)の積に一致する。
よって各桁ごとに 0 の個数と 1 の個数をカウントし、その積を求め元々の桁に注意して繰り上がりを考えたらよい。
MOD = 10**9 + 7
MAX_BIT = 60
n = int(input())
a = list(map(int, input().split()))
ans = 0
for bit in range(MAX_BIT):
counter = [0, 0]
for i in range(n):
counter[a[i] >> bit & 1] += 1
ans += (counter[0] * counter[1]) << bit
ans %= MOD
print(ans)
ちなみにbin()
を使うとTLE (opens in a new tab) する