結果
問題 | No.2195 AND Set |
ユーザー | FromBooska |
提出日時 | 2023-03-07 11:04:52 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 731 ms / 2,000 ms |
コード長 | 1,267 bytes |
コンパイル時間 | 314 ms |
コンパイル使用メモリ | 82,100 KB |
実行使用メモリ | 87,796 KB |
最終ジャッジ日時 | 2024-09-18 02:06:03 |
合計ジャッジ時間 | 10,861 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 39 ms
51,968 KB |
testcase_01 | AC | 39 ms
51,712 KB |
testcase_02 | AC | 585 ms
79,872 KB |
testcase_03 | AC | 648 ms
82,496 KB |
testcase_04 | AC | 578 ms
80,624 KB |
testcase_05 | AC | 675 ms
81,516 KB |
testcase_06 | AC | 722 ms
82,504 KB |
testcase_07 | AC | 618 ms
79,132 KB |
testcase_08 | AC | 694 ms
81,992 KB |
testcase_09 | AC | 610 ms
79,044 KB |
testcase_10 | AC | 731 ms
87,408 KB |
testcase_11 | AC | 723 ms
87,796 KB |
testcase_12 | AC | 723 ms
87,664 KB |
testcase_13 | AC | 717 ms
87,368 KB |
testcase_14 | AC | 721 ms
87,284 KB |
ソースコード
# セグメントツリーでfuncをANDにすればいいか # いや、セグメントツリーにするリストがない、または、長くなりすぎる # setでどの数字があるかを管理、31桁のバイナリに1が何回出てきたかを管理でどうか binary_count = [0]*33 visited = set() add = 0 Q = int(input()) for q in range(Q): query = list(map(int, input().split())) if query[0] == 1: x = query[1] if x not in visited: visited.add(x) add += 1 for shift in range(32): if x>>shift & 1 == 1: binary_count[32-shift] += 1 elif query[0] == 2: x = query[1] if x in visited: visited.discard(x) add -= 1 for shift in range(32): if x>>shift & 1 == 1: binary_count[32-shift] -= 1 elif query[0] == 3: if len(visited) == 0: print(-1) elif add == 0: print(0) else: ans = 0 for i in range(32, -1, -1): if binary_count[i] == add: ans += 2**(32-i) print(ans) #print('add', add, 'visited', visited, 'binary_count', binary_count)