結果
| 問題 |
No.2895 Zero XOR Subset
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-20 22:30:56 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 123 ms / 2,000 ms |
| コード長 | 1,513 bytes |
| コンパイル時間 | 200 ms |
| コンパイル使用メモリ | 82,344 KB |
| 実行使用メモリ | 106,520 KB |
| 最終ジャッジ日時 | 2024-09-20 22:31:01 |
| 合計ジャッジ時間 | 4,844 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 35 |
ソースコード
def find_zero_xor_subset(nums):
n = len(nums)
max_bit = max(nums).bit_length()
basis = [None] * max_bit # 基底ベクトルを格納
basis_indices = [None] * max_bit # 基底ベクトルの元のインデックス
index_combinations = [{} for _ in range(max_bit)] # 基底ベクトルの組み合わせ
for idx, num in enumerate(nums):
coefficients = {} # 現在の数の基底ベクトル表現
coefficients[idx] = 1
temp = num
for i in reversed(range(max_bit)):
if (temp >> i) & 1:
if basis[i] is None:
basis[i] = temp
basis_indices[i] = idx
index_combinations[i] = coefficients
break
else:
temp ^= basis[i]
coefficients = xor_dicts(coefficients, index_combinations[i])
if temp == 0:
# xorがゼロとなる部分集合を発見
result_indices = sorted(coefficients.keys())
return result_indices # インデックスのリストを返す
return None # 存在しない場合
def xor_dicts(a, b):
result = a.copy()
for k in b:
if k in result:
del result[k]
else:
result[k] = b[k]
return result
N = int(input())
A = list(map(int, input().split()))
ans = find_zero_xor_subset(A)
if ans == None:
print(-1)
else:
print(len(ans))
ans = [x+1 for x in ans]
print(*ans)