AGC045 A - Xor Battle
「ある正の整数の集合 A から好きなものを選んで XOR をとり、Kを作ることができるか?」という問題を解く。この問題は集合から作りうる数を全て列挙するのではなく、集合の基底をとり、そこから K が作れるかを考えれば良い。
基底は以下のようにして作れる。
let mut base = vec![]; for i in (0..n) { let mut a = a[i]; for &b in base.iter() { if a ^ b < a { a ^= b; } } if a != 0 { base.push(a); } }
sugoi