結果
問題 |
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())