結果
問題 | No.1240 Or Sum of Xor Pair |
ユーザー | chineristAC |
提出日時 | 2020-08-25 02:01:40 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 804 ms / 2,000 ms |
コード長 | 2,036 bytes |
コンパイル時間 | 226 ms |
コンパイル使用メモリ | 82,120 KB |
実行使用メモリ | 106,556 KB |
最終ジャッジ日時 | 2024-06-22 07:12:14 |
合計ジャッジ時間 | 19,924 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 188 ms
79,048 KB |
testcase_01 | AC | 183 ms
78,716 KB |
testcase_02 | AC | 574 ms
79,048 KB |
testcase_03 | AC | 547 ms
79,420 KB |
testcase_04 | AC | 623 ms
79,372 KB |
testcase_05 | AC | 632 ms
79,260 KB |
testcase_06 | AC | 656 ms
79,508 KB |
testcase_07 | AC | 482 ms
79,308 KB |
testcase_08 | AC | 626 ms
79,476 KB |
testcase_09 | AC | 584 ms
79,392 KB |
testcase_10 | AC | 661 ms
80,216 KB |
testcase_11 | AC | 565 ms
80,736 KB |
testcase_12 | AC | 584 ms
83,072 KB |
testcase_13 | AC | 527 ms
82,416 KB |
testcase_14 | AC | 559 ms
83,176 KB |
testcase_15 | AC | 559 ms
106,264 KB |
testcase_16 | AC | 633 ms
106,492 KB |
testcase_17 | AC | 306 ms
106,300 KB |
testcase_18 | AC | 605 ms
106,376 KB |
testcase_19 | AC | 695 ms
106,508 KB |
testcase_20 | AC | 699 ms
106,396 KB |
testcase_21 | AC | 604 ms
106,164 KB |
testcase_22 | AC | 648 ms
106,296 KB |
testcase_23 | AC | 701 ms
106,476 KB |
testcase_24 | AC | 754 ms
106,204 KB |
testcase_25 | AC | 683 ms
106,204 KB |
testcase_26 | AC | 804 ms
106,556 KB |
testcase_27 | AC | 204 ms
78,676 KB |
testcase_28 | AC | 234 ms
78,728 KB |
testcase_29 | AC | 124 ms
106,288 KB |
testcase_30 | AC | 620 ms
91,928 KB |
testcase_31 | AC | 656 ms
92,244 KB |
testcase_32 | AC | 606 ms
106,524 KB |
ソースコード
import sys,random input=sys.stdin.readline N,X=map(int,input().split()) A=list(map(int,input().split())) def solve_square(): a,b=X//512,X%512 data_conv = [[0 for j in range(512)] for i in range(512)] data_bit = [[0 for j in range(9)] for i in range(512)] cnt = [0 for i in range(512)] for i in range(N): x,y = A[i]//512 , A[i]%512 data_conv[x][y] += 1 cnt[x] += 1 for j in range(9): if not y>>j & 1: data_bit[x][j] += 1 def all_sum(x,y): res = 0 upper_bit = (x | y) << 9 res += upper_bit * cnt[x] * cnt[y] for i in range(9): res += (1 << i) * (cnt[x] * cnt[y] - data_bit[x][i] * data_bit[y][i]) return res def convolute(x,y): res = 0 upper_bit = (x | y) << 9 for i in range(512): for j in range(512): if i^j < b: res += (upper_bit + (i | j)) * data_conv[x][i] * data_conv[y][j] return res def all_sum_equal(x): res = 0 upper_bit = x << 9 res += upper_bit * cnt[x] * (cnt[x] - 1) // 2 for i in range(9): res += (1 << i) * (cnt[x] * (cnt[x] - 1) // 2 - (data_bit[x][i] * (data_bit[x][i] - 1) // 2)) return res def convolute_equal(x): res = 0 upper_bit = x << 9 for i in range(512): for j in range(i): if i^j < b: res += (upper_bit + (i | j)) * data_conv[x][i] * data_conv[x][j] for i in range(512): res += (upper_bit + i) * data_conv[x][i] * (data_conv[x][i] - 1) // 2 return res ans=0 for i in range(512): for j in range(i): if i^j < a: ans += all_sum(i,j) elif i^j == a: ans += convolute(i,j) for i in range(512): if 0 < a: ans += all_sum_equal(i) elif 0 == a: ans += convolute_equal(i) return ans print(solve_square())