結果
| 問題 |
No.1240 Or Sum of Xor Pair
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-08-24 13:45:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,262 ms / 2,000 ms |
| コード長 | 1,201 bytes |
| コンパイル時間 | 174 ms |
| コンパイル使用メモリ | 82,296 KB |
| 実行使用メモリ | 139,912 KB |
| 最終ジャッジ日時 | 2024-06-22 07:08:00 |
| 合計ジャッジ時間 | 18,046 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 30 |
ソースコード
import sys,random
input=sys.stdin.readline
N,X=map(int,input().split())
A=list(map(int,input().split()))
def solve_not_convolute():
data = [0 for i in range(2**18)]
for i in range(N):
data[A[i]] += 1
cum = [data[i] for i in range(2**18)]
cum_bit = [[data[i] * (i>>j & 1) for j in range(18)] for i in range(2**18)]
for i in range(1,2**18):
for j in range(18):
cum_bit[i][j] += cum_bit[i-1][j]
cum[i] += cum[i-1]
def cnt_s(r,x):
id = x
res = [0 for i in range(18)]
cnt = 0
for i in range(18,-1,-1):
if r>>i &1:
L = (id >> i) << i
R = L + (1 << i) - 1
cnt += cum[R] - cum[L-1] * (L>0)
for j in range(18):
res[j] += cum_bit[R][j] - cum_bit[L-1][j] * (L>0)
id ^= (1 << i)
S = 0
for i in range(18):
if x >> i & 1:
S += (1 << i) * cnt
else:
S += (1 << i) * res[i]
return S
res = 0
for i in range(N):
res += cnt_s(X,A[i])
res -= sum(A)
res //= 2
return res
print(solve_not_convolute())